dijkstra算法求最短路(防止标题重复)

1 Dijkstra算法思想
首先找距离源点最近的点
此点必然是与源点直接相连的点
借助邻接矩阵S对应的行,
找最小值即得距离源点最近的点

接下来找距离源点第二近的点
或者是从S出发先到Y再到达的点,或者是与源点直接相连的点
否则与Y最近相矛盾

对于每个点,两类路比较距离取最小
此时得到从S出发经可选跳点集{y}到各点的最短路
表中最小值即得距离S第二近的点Z

2 Dijkstra算法实现
越看越像 Prim算法

finish[v0] = TRUE;
D[v0] = 0;
for (v = 0; v < G.vexnum; v++)
{
	if (v != 0)
	{
		finish[v] = FALSE;
		D[v] = G.arcs[v0][v];
	}
	if (D[v] < INF)
		P[v] = "v0->v"	
}
for (int i = 1; i <= G.vexnum - 1; i++)
{
	min = INF;
	for (w = 0; w < G.vexnum; w++)
	{
		if (finish[w] == FALSE && D[w] < min)
		{
			v = w;
			min = D[w];
		}
	}
	finish[v] = TRUE;
	for (w = 0; w < G.vexnum; w++)
	{
		if (finish[w] == FALSE && (min + G.arcs[v][w] < D[w]))
		{
			D[w] = min + G.arcs[v][w];
			P[w] = strcat(P[v], "->w");
		}
	}
}

3 算法推广

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值