请大家帮我找一下问题

#include <stdio.h>

#define MAX_NODES 5 /*定义最大节点数*/
#define INFINITY 99999
int n=MAX_NODES;
int dist[MAX_NODES][MAX_NODES] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25} };/*定义二维数组*/

void shortest_path(int s, int t, int path[]) /*定义最短路径的构造方法*/
{
	struct state
	{
		int predecessor;/*定义上一个节点*/
		int length;/*定义路径长度*/
		enum{permanent, tentative} label;/*定义“永久”标记或“暂时”标记*/
	} state[MAX_NODES];
	int i/*定义要经过的当前节点*/, k/*定义要经过的下一个节点*/, min=5/*定义路径最小值,即将计算出来的最短路径与此值比较,若小于此值,则为最短路径*/;
	struct state *p;/*定义状态指针,即数据传输到第几个节点*/
	for(p=&state[0]; p<&state[n]; p++)
	{
		p->predecessor = -1;
		p->length = INFINITY;
		p->label = tentative;
	}
	state[t].length = 0;/*定义当前路径长度为0*/
	state[t].label = permanent;
	k = t;/*将数据存储起来*/
	do/*计算最短路径*/
	{
		for(i=0; i<n; i++)
			if(dist[k][i] !=0 && state[i].label == tentative)/*dist[k][i]为两节点之间的距离*/
			{
				if(state[k].length + dist[k][i]< state[i].length)
				{		
					state[i].predecessor = k;/*下一个节点的标记加上从下一个节点到该节点的距离小于该节点原来的标记,则找到了最短路径*/
					state[i].length = state[k].length + dist[k][i];
				
				}			
			}
		k=0;min=INFINITY;
		for(i; i<n; i++)
			if(state[k].label == tentative &&  state[i].length < min)
			{		
				min = state[i].length;
				k=i;			
			}
		state[k].label = permanent;/*下一个节点的标记是永久的*/

	}while(k!=s);
	i=0;k=s;
	do{
		path[i++] = k;
		k = state[k].predecessor;
	} while (k>=0);

}

int main()
{
	int i;
	int path[MAX_NODES];
	shortest_path(0, 1, path);
	for( i = 0; i < MAX_NODES; i++ )
	{
         printf("path[%d] = %d\n", i, path[i] );/*打印最短路径的长度*/

	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值