本文主要是介绍uva_risk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击打开链接
先输入19行,每行先是一个数字J,接着跟着J个数字,输入的每个数字x表示行数i与x两点是联通的(且距离为1)。随后再输入一个数字n,紧跟着n行,每行输入一个出发点和目的地点,输出两个点之间的最小距离。
直接用Floyd算法套模板搞定。
#include<stdio.h>
#include<string.h>
const int INF = 1000;
int map[21][21];int main(){int a,b;int i,j,k;int cnt = 0;while(scanf("%d",&a)!=EOF){for(i = 1;i<21;i++){for(j = 1;j<21;j++) {if(i == j) map[i][j] = 0;else map[i][j] = INF;}}for(i = 1;i<=a;i++) {scanf("%d",&b);map[1][b] = map[b][1] = 1;}for(i = 2;i<=19;i++){scanf("%d",&a);for(j = 1;j<=a;j++){scanf("%d",&b);map[i][b] = map[b][i] = 1;}}for(k = 1;k<=20;k++){for(i = 1;i<=20;i++){for(j = 1;j<=20;j++){if(map[i][j]>map[i][k] + map[k][j])map[i][j] = map[i][k] + map[k][j];}}}int t;scanf("%d",&t);printf("Test Set #%d\n",++cnt);while(t--){scanf("%d%d",&a,&b);printf("%2d to %2d: %d\n",a,b,map[a][b]);}printf("\n");}return 0;
}
这篇关于uva_risk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!