学习最短路径吧,这题不太适合用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;
}
很漂亮很简单的代码。