题意:股票经纪人要在人群中传播谣言,给出有联系的两个人及谣言在他们之间传播的时间,让你求出谣言从某个人开始传播至所有人所需的最短时间,以及这个人是第几个人
folyd算法
java代码
1 import java.util.Scanner; 2 import java.util.Arrays; 3 4 public class Main{ 5 static int INF = 0x3f3f3f3f; 6 7 public static void main(String[] args){ 8 int T; 9 Scanner in = new Scanner(System.in); 10 while(in.hasNext()){ 11 T = in.nextInt(); 12 if(T==0) 13 break; 14 int map[][] = new int[T+1][T+1]; 15 16 for(int i=0;i<=T;i++) 17 Arrays.fill(map[i],INF); 18 19 for(int i=1;i<=T;i++){ 20 int m=in.nextInt(); 21 for(int j=1;j<=m;j++){ 22 int u=in.nextInt(); 23 int w = in.nextInt(); 24 map[i][u] = w; 25 } 26 } 27 28 for(int k=1;k<=T;k++) 29 for(int i=1;i<=T;i++) 30 for(int j=1;j<=T;j++) 31 if(k!=i&&i!=j&&map[i][k]+map[k][j]<map[i][j]) 32 map[i][j] = map[i][k]+map[k][j]; 33 34 int min = INF; 35 int s=0; 36 for(int i=1;i<=T;i++){ 37 int max = 0; 38 for(int j=1;j<=T;j++){ 39 if(i!=j&&map[i][j]>max) 40 max = map[i][j]; 41 } 42 if(min>max){ 43 min = max; 44 s = i; 45 } 46 } 47 if(min>=INF) 48 System.out.println("disjoint"); 49 else 50 System.out.println(s+" "+min); 51 } 52 } 53 }
时间: 2024-10-17 12:14:52