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;
}