最短路径问题--BFS算法

最短路径问题–BFS算法

一、单源最短路径问题

1.BFS算法(无权图)

代码实现

//求顶点u到其他顶点的最短路径
void BFS_MIN_Distance(Graph G, int u){
	//d[i]表示从u到i结点的最短路径
	for(int i=0; i<G.vexnum; i++){
		d[i] = MAX; //初始化路径长度
		path[i] = -1; //最短路径从哪个顶点过来
	}
	d[u] = 0;
	visited[u] = true;
	enQueue(Q, u);
	while(!isEmpty(Q)){ //BFS算法主过程
		deQueue(Q, u); //队头元素u出队
		for(w=firstNeighbor(G,v); w>=0; w=nextNeighbor(G,v,w)){
			if(!visited[w]){ //w为u的尚未访问的邻接顶点
				d[w] = d[u] + 1; //路径长度加1
				path[w] = u; //最短路径应从u到w
				visited[w] = true; //设已访问标志
				enQueue(Q, w); //顶点w入队
			}//if
		}//for
	}//while
}

就是对BFS的小修改,在visit一个顶点时,修改其最短路径长度d[]并在path[]记录前驱结点

2.Dijkstra算法(带权图、无权图)

二、各顶点间的最短路径

Floyd算法(带权图、无权图)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和安韩Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值