floyd算法【图论

floyd大神发明的算法?
挺难理解的。

源代码

#include <cstdio>
#include <cstring>
using namespace std;

#define INF 0x3f3f3f3f

int dist[105][105];
int n;
void Floyd()
{
	for(int k=1; k<=n; k++)
		for(int i=1; i<=n; i++)
			for(int j=1; j<=n; j++)
				if(dist[i][k] + dist[k][j] < dist[i][j])
					dist[i][j] = dist[i][k]+dist[k][j];
}

int main()
{
	int  m, x, y, z;
	while(~scanf("%d%d",&n, &m))
	{
		memset(dist, INF, sizeof dist);
		for(int i=0; i<=n; i++)
			dist[i][i] = 0;
		for(int i=0; i<m; i++)
		{
			scanf("%d%d%d", &x, &y, &z);
			if(z < dist[x][y])
				dist[x][y] = dist[y][x] = z;
		}
		Floyd();
		for(int i=1; i<=n; i++)
		{
			for(int j=1; j<n; j++)
				printf("%d ", dist[i][j]);
			printf("%d
",dist[i][n]);
		}
	}
	return 0;
}

原文地址:https://www.cnblogs.com/shengwang/p/9738911.html