POJ 1603

package poj; import java.util.Scanner; public class poj1603 { public static void main(String args[]){ Scanner in = new Scanner(System.in); int a[][]; int b[][]; int count=0; while(in.hasNext()){ //初始化邻接矩阵 count++; a=new int [21][21]; b=new int [21][21]; for(int i=1;i<=19;i++){ int n=in.nextInt(); for(int j=1;j<=n;j++){ int m=in.nextInt(); a[i][m]=1; a[m][i]=1; } } int n=in.nextInt(); int d[][]=new int [n+1][3]; for(int i=1;i<=n;i++){ d[i][1]=in.nextInt(); d[i][2]=in.nextInt(); } // b[i][j]=min{b[i][j],b[i][k]+b[k][j]} for(int i=1;i<=20;i++){ for(int j=1;j<=20;j++){ if(i==j){ continue; }else{ for(int k=1;k<=20;k++){ if(a[i][k]==0||a[k][j]==0){ continue; }else{ if(a[i][j]==0){ a[i][j]=a[i][k]+a[k][j]; }else a[i][j]=Math.min(a[i][j], a[i][k]+a[k][j]); } } } } } //print System.out.println("Test Set #"+count); for(int i=1;i<=n;i++){ System.out.println(d[i][1]+" to "+d[i][2]+": "+a[d[i][1]][d[i][2]]); } } } }

使用floyd算法计算两端点的最短距离 使用邻接矩阵存储图

你可能感兴趣的:(POJ 1603)