用Floyd-Warshall算法求解多源最短路徑問題(C語言)

題目:
一個圓點代表一個城市,帶箭頭的線表示路徑方向(只能單方向走),線上的數字表示該路徑的長度。在這裏插入圖片描述在這裏插入圖片描述
代碼:

#include <stdio.h>

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]<inf && e[k][j]<inf && e[i][j]>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;

}

測試數據:
在這裏插入圖片描述
測試結果:
在這裏插入圖片描述

發佈了6 篇原創文章 · 獲贊 4 · 訪問量 353
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章