Floyd算法 #include<stdio.h> #define inf 1000 int main(){ int t=0,x,y,i,j,k,n,m; int a[30][30]; while(scanf("%d",&m)!=EOF){ t++; for(i=1;i<=20;i++) for(j=1;j<=20;j++) if(i==j) a[i][j]=0; else a[i][j]=inf; for(x=1;x<=19;x++){ for(j=1;j<=m;j++){ scanf("%d",&y); a[x][y]=1; a[y][x]=1; } if(x!=19) scanf("%d",&m); } for(k=1;k<=20;k++) for(i=1;i<=20;i++) for(j=1;j<=20;j++) if(a[i][j]>a[i][k]+a[k][j]) a[i][j]=a[i][k]+a[k][j]; scanf("%d",&n); printf("Test Set #%d/n",t); for(i=1;i<=n;i++){ scanf("%d%d",&x,&y); printf("%d to %d: %d/n",x,y,a[x][y]); } printf("/n"); } return 0; }