Floyd最短路
求1到5的最短路径
//邻接矩阵存
#include <iostream>
using namespace std;
int d[51][51]; //最短距离;
int main()
{
int i, j, k, x, y;
int N = 5, M = 6; //顶点数和边数
int e[6][3] = {
{1, 2, 30}, {1, 3, 10}, {2, 4, 20},
{2, 5, 25}, {3, 4, 10}, {4, 5, 10}};
//初始化d
for (i = 1; i <= N; i++)
{
for (j = 0; j <= N; j++)
{
if (i != j)
d[i][j] = 1000; //边均设为正无穷
}
}
for (i = 1; i <= M; i++)
{
x = e[i - 1][0];
y = e[i - 1][1];
d[x][y] = d[y][x] = e[i - 1][2]; //对存在的边赋值
}
//求解最短路
for (i = 1; i <= N/2 + 1; i++)//起点 (简化前为i<=N) 如果只有一个起点,让i一直为1
{
for (j = 1; j <= N; j++)//终点
{
for (k = 1; k <= N; k++)//中间点
{
if (d[i][k] + d[k][j] < d[i][j])
d[j][i] = d[i][j] = d[i][k] + d[k][j];//找出最小值
}
}
}
//输出最短路径
printf("d[1][5] = %d\n", d[1][5]);
return 0;
}