用Floyd-Warshall算法求解多源最短路径问题(C语言)

题目:
一个圆点代表一个城市,带箭头的线表示路径方向(只能单方向走),线上的数字表示该路径的长度。用Floyd-Warshall算法求解多源最短路径问题(C语言)_第1张图片用Floyd-Warshall算法求解多源最短路径问题(C语言)_第2张图片
代码:

#include

int main()
{
int e[10][10],k,i,j,n,m,t1,t2,t3;
int inf=9999; //代指无穷大(因为题目中的点和路径很少,就解题而言9999就已经足够大了)
scanf("%d %d",&n,&m);//有n个点,m条路径(一个点代表一个城市)

//邻接矩阵存储法(创建一个二维数组来存放点到点的路径信息)
for (i=1;i<=n;i++)
{
	for (j=1;j<=n;j++)
	{
		if (i==j)
		{
			e[i][j]=0;
		}
		else e[i][j]=inf;
	}
}
//读入点和点之间的路径信息
for (i=1;i<=m;i++)
{
	scanf("%d %d %d",&t1,&t2,&t3);
	e[t1][t2]=t3;
}

//Floyd-Warshall算法核心语句
for (k=1;k<=n;k++)
{
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=n;j++)
		{
			if (e[i][k]e[i][k]+e[k][j])
			{
				e[i][j]=e[i][k]+e[k][j];//更新i点到j点的最短路径
			}
		}
	}
}

//结果输出
for (i=1;i<=n;i++)
{
	for (j=1;j<=n;j++)
	{
		printf("%10d",e[i][j]);
	}
	printf("\n");
}
return 0;

}

测试数据:
在这里插入图片描述
测试结果:
用Floyd-Warshall算法求解多源最短路径问题(C语言)_第3张图片

你可能感兴趣的:(用Floyd-Warshall算法求解多源最短路径问题(C语言))