您的位置:首页 > 其它

uva 567(最短路径)

2014-11-04 19:54 281 查看
题意:有20个城镇,然后给出了城镇之间的连通情况,要求输出从给出的起点到终点之间最少经过多少个城镇。

题解:最短路径问题,把每个城镇之间的距离当做1,经过的城镇数量就可以根据计算最短路径得出。用的floyd算法。

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 25;
const int INF = 0x3f3f3f3f;

int que, t = 1, g

, num
;

void floyd() {
for (int k = 1; k <= 20; k++)
for (int i = 1; i <= 20; i++)
for (int j = 1; j <= 20; j++)
if (g[i][j] > g[i][k] + g[k][j]) {
g[i][j] = g[i][k] + g[k][j];
}

}

int main() {
while (scanf("%d", &num[1]) != EOF) {
int a;
memset(g, INF, sizeof(g));
for (int i = 1; i <= num[1]; i++) {
scanf("%d", &a);
g[1][a] = g[a][1] = 1;
}
for (int i = 2; i < 20; i++) {
scanf("%d", &num[i]);
for (int j = 1; j <= num[i]; j++) {
scanf("%d", &a);
g[i][a] = g[a][i] = 1;
}
}
floyd();
scanf("%d", &que);
printf("Test Set #%d\n", t++);
int sta, end;
while (que--) {
scanf("%d%d", &sta, &end);
printf("%2d to %2d: %d\n", sta, end, g[sta][end]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva floyd