图论之无权最短路径
2015-02-03 12:22
246 查看
无权最短路径顾名思义是边没有权值,所以我们可以把所有的边都赋值为1,求最短路径可以采用广度优先搜索(BFS),该方法按层处理顶点,距开始点最近的那些顶点首先被求值,而最远的那些顶点最后被求值。这很像对树的层序遍历。首先先把不通的路径置为无穷大(我这里置为-1),可以通的路置为1,然后运用广度优先搜索(使用的是队列实现),先取一个点作为始发点,这里取v3,然后把v3加入队列,然后一次寻找可以通的路,把这个点加入队列中,找到所有与v3相通的结点,v3便可出队,一直执行以上步骤,最后运行结果为如图所示。
#include<iostream> #include<queue> #include<vector> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1001; vector<vector<int> >map(maxn,vector<int>(maxn)); vector<int> visit(maxn); int dist[maxn]; void init(int m) //图的创建 { int i,j,n; int num1,num2; for(i=1;i<=m;i++) { for(j=1;j<=m;j++) { map[i][j] = -1; //-1表示不通 } } for(i=1;i<=m;i++) { visit[i] = 0; //初始化都没访问过 dist[i] = 0; } cout<<"please enter n numbers which can connect:"<<endl; cin>>n; for(i=1;i<=n;i++) { cin>>num1>>num2; //num1为起始点,num2为终点 map[num1][num2] = 1; } } void bfs(int m) //用广度优先搜索计算无权最短路径 { queue<int> que; int temp,i; que.push(3); //初始化v3入队 visit[3] = 1; cout<<"3:enqueue."<<endl; while(!que.empty()) { temp = que.front(); que.pop(); cout<<temp<<":dequeue."<<endl; for(i=1;i<=m;i++) { if(map[temp][i] == 1 && visit[i] == 0) //可通 { dist[i] = dist[temp] + 1; visit[i] = 1; que.push(i); cout<<i<<":enqueue."<<endl; } } } } void printdist(int m) { for(int i=1;i<=m;i++) { cout<<i<<" distance is:"<<dist[i]<<endl; } sort(dist+1,dist+m+1); cout<<"shortest distance is:"<<dist[m]<<endl; } int main() { int m; cout<<"please enter total vertex:"<<endl; freopen("111","r",stdin); cin>>m; init(m); bfs(m); printdist(m); return 0; }运行结果如下:
相关文章推荐
- 无权最短路径BFS(广度优先搜索)算法(图论)
- 图论-BFS解无权有向图最短路径距离
- 理论: 图论(5): 无权图的最短路径
- 图论------创建邻接表图,打印邻接表图,无权最短路径输出函数
- 图论(三)------广度优先搜索与单源无权最短路径
- POJ - 2139 Six Degrees of Cowvin Bacon(图论/无权最短路径BFS)
- 图论-BFS解无权有向图最短路径距离
- 《数据结构与算法分析:C语言描述》复习——第九章“图论”——无权值的最短路径问题
- 无权边单源最短路径
- 图论之Dijkstra最短路径算法
- [SDOI2010] BZOJ 1922 大陆争霸-图论-最短路径-dijkstra算法
- 图论无权路径算法实现
- 图论-最短路径问题
- 「图论」最短路径长度-Dijkstra
- 图论之最短路径算法
- 无权最短路径
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 图论 最短路径floyd
- 夕拾算法进阶篇:33)最短路径Floyd(图论)
- 图论-最短路径--3、SPFA算法O(kE)