学习最短路径吧,这题不太适合用floyd 毕竟 n3 的复杂度 还是很伤的,但是还是把自己用 floyd 写的半残品记下来吧,以备不时之需。
#include <cstdio>
#include <vector>
int main()
{
int N,M,C1,C2;
int value[501][501] = {0};
int change[501][501] = {0};
int cityValue[501] = {0};
scanf("%d %d %d %d",&N,&M,&C1,&C2);
for (int i = 0; i < N; i++)
{
int num;
scanf("%d",&num);
cityValue[i] = num;
for (int j = 0 ; j < N; j++)
{
value[i][j] = 65535;
value[i][i] = 0;
change[i][j] = j;
}
}
for (int i = 0; i < M; i++)
{
int c1,c2,tmp;
scanf("%d %d %d",&c1,&c2,&tmp);
value[c1][c2] = tmp;
value[c2][c1] = tmp;
}
for (int k = 0; k < N; k++)
{
for (int v = 0; v < N; v++)
{
for (int w = 0; w < N; w++)
{
if (value[v][w] > (value[v][k] + value[k][w]))
{
value[v][w] = value[v][k] + value[k][w];
change[v][w] = change[v][k];
}
}
}
}
for (int v = 0; v < N; v++)
{
for (int w = v + 1; w < N; w++)
{
printf("v%d-v%d weight: %d",v,w,value[v][w]);
int k = change[v][w];
printf("path : %d",v);
while(k!=w)
{
printf("-> %d",k);
k = change[k][w];
}
printf(" -> %d\n",w);
}
printf("\n");
}
return 0;
}
很漂亮很简单的代码。
本文介绍了一个使用Floyd算法解决最短路径问题的具体实现案例。通过给出的代码示例,展示了如何构建图的数据结构并利用Floyd算法计算任意两点间的最短路径。
1279

被折叠的 条评论
为什么被折叠?



