ZOJ 1221 Risk
题目大意是给出世界地图,判断从国家A到国家B最少经过多少个国家。
只需将每条边的权值赋为1,然后求最短路径即可。
#include <stdio.h> #define INF 10000 int dist[25][25]; int ob[400][2]; void floyd() { int i,j,k; for(k=1;k<=20;k++) for(i=1;i<=20;i++) for(j=1;j<=20;j++) if(dist[i][j]>dist[i][k]+dist[k][j]) dist[i][j]=dist[i][k]+dist[k][j]; } int main() { int i,j,x,n,A,B,k; int sum=0; while(scanf("%d",&x)!=EOF) { sum++; for(i=1;i<=20;i++) for(j=1;j<=20;j++) dist[i][j]=INF; for(k=1;k<=x;k++) { scanf("%d",&j); dist[1][j]=dist[j][1]=1; } for(i=2;i<=19;i++) { scanf("%d",&x); for(k=1;k<=x;k++) { scanf("%d",&j); dist[i][j]=dist[j][i]=1; } } floyd(); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&ob[i][0],&ob[i][1]); printf("Test Set #%d\n",sum); for(i=1;i<=n;i++) { A=ob[i][0]; B=ob[i][1]; printf("%d to %d: %d\n",A,B,dist[A][B]); } printf("\n"); } return 0; }