最短路径BFS算法matlab,数据结构笔记——最短路径BFS算法

写在前面:科班出身,应届考研党,愿21考研成功上岸,冲冲冲!

目录

一、最短路径问题

二、BFS求无权图的单源最短路径

三、代码实现

四、总结

一、最短路径问题

单源最短路径——BFS算法、Dijkstra算法

其中BFS算法(无权图)、Dijkstra算法(带权图,无权图)

各顶点间的最短路径——Floyd算法(带权图、无权图)

二、BFS求无权图的单源最短路径

注:无权图可以视为一种特殊的带权图,只是每条边的权值都为1

356e8e8ca3d405a2b797ed03dad40824.png

6e748f61cb094fafda45aafa07e29a53.png

532bc248dd8547b269b46f169101aec1.png

7019ae772fb61431a8f67f4d0cf68dad.png

bf66d72576f7fbcf3aaa02904b827970.png

d7f7c065c351fd43b26f8a901102eca7.png

95ca6f74b2fcbfdfd8058ba4cded69cf.png

67479cad2a6fe40e36a7e22c647e3d55.png

三、代码实现

bool visited[MAX_VERTEX_NUM];//访问标记数组

//广度优先遍历

void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G

visit(v); //访问初始顶点v

visited[v] = TRUE; //对v做已访问标记

Enqueue(Q,v); //顶点v入队列Q

while(!isEmpty(Q)){

DeQueue(Q,v); //顶点v出队列

for( w = FirstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w))

//检测v所有邻接点

if(!visited[w]){ //w为v的尚未访问的邻接顶点

visit(w); //访问顶点w

visited[w] = TRUE; //对w做已访问标记

EnQueue(Q,w); //顶点w入队列

}//if

}//while

}

//求顶点u到其他顶点的最短路径

void BFS_Distance(Graph G,int u){

for(i = 0;i < G.vexnum;++i){

d[i] = w;

path[i] = -1;

}

d[u] = 0;

visited[u] = TRUE;

EnQueue(Q,u);

while(!isEmpty(Q)){

DeQueue(Q,u);

for(w = FirstNeighbor(G,u);w >= 0;w = NextNeighbor(G,u,w))

if(!visited[w]){

d[w] = d[u] + 1;

path[w] = u;

visited[w] = TRUE;

EnQueue(Q,w);

}//if

}//while

}

b7e7a86facb7389150d472b75dcb7695.pngba318385c305cb991323e885ce942cb8.pngd28b7b8b6d84acce5cb47d00fd224e7b.png

d00ceaa6d46377b14ce8fcaf815026e9.png0b4276a0bb9f293b2b3085e365a1bc4a.pngcbe209dc9e3e6ff566695a73fd8173df.png

1a183ee52f6bcc31995666aedc448956.png0b4276a0bb9f293b2b3085e365a1bc4a.pngcbe209dc9e3e6ff566695a73fd8173df.png

d315e1f8aff0577b2a125a8da00db95f.pngadf7ef426df73b410839d0c4fd2c8fd0.pngd598de6d9b64e4cae431442eddfaed4d.png

1475684a2ea0856f17ae383fb2190e99.pngadf7ef426df73b410839d0c4fd2c8fd0.pngd598de6d9b64e4cae431442eddfaed4d.png

a65cffa812e971a1bc1696fa2900b3af.png4695c00d9048305f5660215bfb186ca5.pngdad692e999ee719dbbecba920b79442d.png

f4d88dbf427d230882ee7f8b9e4a8b80.pnge10c524f2eec424f66fc9ae4b83681ec.png8c95a6e086f9369bcb9992e45a6a8dd6.png

11429e31bb4240725cac2ba536479b74.pngbc97a7719352ecd5efaa1b7a67ccc67c.png832691718646f122dd7d922be886b14c.png

b02d5e690fb92b844007ef769274eb09.png14f031e73fd3c7ea7ca833424c76e327.png5494dd4cc405f20fdd2845a67239591e.png

fc33fe02444be8facecfccce74921f48.png6603902827840c9d00c2e94c66e218af.pnge4903c1c8ed80d247a6cd5884e623d5d.png

8db39826735772975aafe2e1d2899d2f.png61454277acd1547557cc56f602b7b706.pngced646ca977a6c44b3c4ff4e68e6fb76.png

08e6a3c75b19e105aed859bfb5a52c1d.png510b30bdb12eb334c070cb3edfc66142.pngced646ca977a6c44b3c4ff4e68e6fb76.png

fc756d57f9dfb4c359182674ff3df193.png85d618519b49d1c06512bde1f78a80b2.png0bb8f4e9986f27709e1f7e0b2c6a3fd4.png

3cc01f8ad2a6fe8ce2c985a4f3d5f324.png3fe11776f36fcd546176a041cec30686.pngc01c95076d6b06961ad1bb076e15b310.png

28d71dea1b074f4f95e6da92e267b76d.png5d57da12e5ed9e2aaa2f2052022809c6.pngc62785f13ac4d05c2a44e939ca495ce7.png

299f60e51df303bba918c95e415b70af.png9ab57ca9befe0deb1819f9534fb547ec.png3a4e671c2e18aa0dc7a24b492396ac2c.png

6d57af5261f50590135d36aaea6d1e84.png60cb41e38b1b7476eeeac3b5ab2b1692.pnga0f595636d733c9a45a576d963b435c1.png

eac9c1054adb6c58e84f1a73a7b69127.png875773ff4bc9386c4956d908c50771a8.png0c3b327d13ed08c261359e1730e04226.png

edd7bf9192ab98fc01874960b9db4816.png875773ff4bc9386c4956d908c50771a8.png0c3b327d13ed08c261359e1730e04226.png

四、总结

b7e7a86facb7389150d472b75dcb7695.png

对应的广度优先生成树为

c047dd86eee9cb9470abf54eacc987a1.png

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

2到8的最短路径长度=d[8]=3

通过path数组可知,2到8的最短路径为:8

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值