赞
踩
1.迪杰斯特拉算法有一种贪心的思想
,它总是找到当前已知的最段路径进行延拓。
2.而Floyd算法则是可以寻找任意两点的最段路径,他的思想是通过不同的中转结点进行比较,在找出最短。
//floyd算法总结 /* 可以计算任意两点之间的最短单元路径 */ #include <iostream> #include <cstring> #include <algorithm> #define inf 0x3f3f3f3f using namespace std; int map[105][105]; int n,m; //初始化 void Init() { for(int i = 1;i<=n;i++) for(int j = 1;j<=n;j++) if(i==j) map[i][j] = 0; else map[i][j] = inf; } int main() { cin>>n>>m; int u,v,w; Init(); //读入数据 for(int i = 1;i<=m;i++) { scanf("%d%d%d",&u,&v,&w); map[u][v] = w; } //其思想就是以某个点为中转点进行延拓 //floyd算法 // k 就相当于选择的中间结点 for(int k = 1;k<=n;k++) for(int i = 1;i<=n;i++) for(int j =1;j<=n;j++) { if(map[i][k]+map[k][j]<map[i][j]) map[i][j] = map[i][k]+map[k][j]; } for(int i = 1;i<=n;i++) { for(int j = 1;j<=n;j++) printf("%5d",map[i][j]); cout<<endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。