floyd最短路径算法2,求出经过哪些路径
2017-03-11 17:36
281 查看
#include<iostream> #include<stdio.h> #include<stdlib.h> #include <string.h> #include<algorithm> using namespace std; //最短路径算法 2 //数组的下标从0开始,但是算法下标从1开始,所以将数组0位的空着,方便理解。 int W[6][6]; int D[6][6];//最后的最短路径结果 int P[6][6];//从V_i到V_j最短路径上一个中间顶点的**最高**索引(若至少存在一个中间顶点) //若不存在中间顶点则为0 void floyd(int n,int D[][6],int P[][6]) { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(D[i][j]>D[i][k]+D[k][j]) { D[i][j]=D[i][k]+D[k][j]; P[i][j]=k;//这个地方+1是因为下标的缘故 } } } } } void path(int q,int r) { if(P[q][r]!=0) { path(q,P[q][r]); cout<<"v"<<P[q][r]; //path(P[q][r],r); } } int main() { int n=5; cout<<"输入邻接矩阵"<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>W[i][j]; } } memset(P,0,sizeof(int)); memcpy(D,W,sizeof(int)*36); floyd(n,D,P); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<D[i][j]<<" "; } cout<<endl; } cout<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<P[i][j]<<" "; } cout<<endl; } cout<<endl; path(5,3); return 0; }
相关文章推荐
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 最短路径Floyd算法分析 收藏 Floyd最短路径算法
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- [算法]获得最短路径的Floyd与Dijkstra算法
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Dijkstra/Floyd-Warshall 最短路径算法
- 最小生成树算法(Prime、Kruskal)和最短路径算法(Dijkstra、Floyd)
- 动态规划---->每对定点之间的最短路径 Floyd(弗洛伊德)算法
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- FLOYD每对顶点间最短路径算法
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Floyd-算法的最短路径保存问题
- 最短路径问题的几种算法(dijkstra , Floyd ,) 例 hdoj 1002 畅通工程续
- hdu 1874 最短路径 dijkstra 和floyd 算法
- floyd最短路径算法的实现
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 最短路径算法—Floyd(弗洛伊德)算法分析与实现(C/C++)
- 数据结构之(图最短路径之)Floyd(弗洛伊德)算法
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较