Dijkstra算法

 

代码如下:

/***********************************************************************************/
#define MAXVEX 9
#define INFINITY 65535
typedef int Pathmatirx[MAXVEX];	/*用于存储最短路径下标的数组*/
typedef int ShortPathTbale[MAXVEX];	/*用于存储到各点最短路径的权值和*/

/*Dijkstra算法,求有向网G的V0顶点v最短路径P[v]及带权长度D[v]*/
/*P[v]的值为前驱下标,D[v]的值表示V0到V的最短路径长度和*/
void ShortestPath_Dijktra(MGraph G,int v0,Pathmatirx *P,ShortPathTbale*D)
{
	int v, w, k, min;
	int final[MAXVEX];	/*final[w]=1表示求得顶点V0到Vw的最短路径*/

	for (v = 0; v < G.numVertexes; v++)
	{
		final[v] = 0;	/*全部顶点初始化为未知最短路径*/
		(*P)[v] = 0;	/*初始化路径数据*/
		(*D)[v] = G.arc[v0][v];	/*初始化v0点到各顶点的初始权值*/
	}

	(*D)[v0] = 0;	/*v0到v0路径为0*/
	final[v0] = 1;	/*v0到v0不需要求路径*/

	/*开始主循环,每次求得v0到某个顶点的最短路径*/
	for (v = 1; v < G.numVertexes; v++)
	{
		min = INFINITY;	/*当前所知离v0顶点的最近距离,初始化为无穷大*/

		for (w = 0; w < G.numVertexes; w++)
		{
			if (!final[w] && (*D)[w] < min)
			{
				k = w;
				min = (*D)[w];	/*w顶点距离v0顶点更近*/
			}
		}

		final[k] = 1;
		for (w = 0; w < G.numVertexes; w++)
		{
			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、付费专栏及课程。

余额充值