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\n",dist[i][n]);
		}
	}
	return 0;
}

相关文章:

  • 2021-07-05
  • 2022-12-23
  • 2021-11-28
  • 2021-12-05
  • 2022-12-23
  • 2021-11-10
  • 2022-03-03
猜你喜欢
  • 2022-12-23
  • 2021-04-17
  • 2019-10-28
  • 2021-04-04
  • 2021-08-29
  • 2021-07-02
  • 2021-05-18
相关资源
相似解决方案