Dijkstra算法

15 篇文章 0 订阅
12 篇文章 0 订阅
#define MAXVEX 9
#define INFINITY 65535

typedef int Patharc[MAXVEX];	//用于存储最短路径下标的数组
typedef int ShortPathTable[MAXVEX];  // 用于存储到各点最短路径的权值和

void ShortestPath_Dijkstra(MGraph G, int V0, Patharc *P, ShortPathTable *D) {
	int v, w, k, min;
	int final[MAXvex];	// final[w] = 1表示已经求得顶点V0到Vw的最短路径
	
	// 初始化数据
	for( v=0; v<G.numVertexes; v++) {
		final[v] = 0;			// 全部顶点初始化为未找到最短路径 
		(*D)[V] = G.arc[V0][v];	// 将与V0点有连线的顶点加上权值 
		(*P)[V] = 0;			// 初始化路径数组P为0 
	} 
	
	(*D)[V0] = 0;	// V0至V0的最短路径为0
	final[V0] = 1;	// V0至V0不需要求路径
	
	// 开始主循环,每次求得V0到某个v顶点的最短路径
	for( v=1; v<G.numVertexes; v++ ) {
		min = INFINITY;
		for( w=0; w<G.numVertexes; w++) {
			if( !final[w] &  & (*D)[w]<min) {
				k = w;
				min = (*D)[w];
			}
		}
		final[k] = 1; // 将目前找到的最近的顶点置1
		
		// 修正当前最短路径的距离
		for( w=0; w<G.numVertexes; w++) {
			//如果经过v顶点的路径比现在这条路径的长度短的话, 更新!
			if( !final[w] && (min+G.arc[k][w] < (*D)[w])) {
				(*D)[w] = min + G.arc[k][w];	// 修改当前路径长度 
				(*P)[w] = k;				// 存放前去顶点 
			} 
		} 
		 
	} 
		
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值