poj 1502

题意:
给你一个不完全的矩阵,数字表示权值,x表示两点间不可达
由于自身到自身花费的时间为0,所以没有给出,由于i到j和j到i距离相同,互达时间相同
所以只给出了一半的临界矩阵。
根据给你的这个临界矩阵,让你来求从点1到其他点所花费最短时间集里面的的最大值。
一个很直接的最短路

三种单源点最短路径算法都练习了以下,dijkstra,bellman-ford,SPFA

 1 import java.util.Scanner;

 2 import java.util.Arrays;

 3 /*

 4 dijkstra

 5 */

 6 public class Main{

 7     static int INF = 0x3f3f3f3f;

 8     static int n;

 9     static boolean visited[];

10     

11     public static void dij(int map[][],int dist[]){

12         visited[1] = true;

13         int u = 0;

14         for(int i=1;i<n;i++){

15             int min = INF;

16             for(int j=2;j<=n;j++){

17                 if(visited[j]==false&&min>dist[j]){

18                     min = dist[j];

19                     u = j;

20                 }

21             }

22             visited[u] = true;

23             for(int k=2;k<=n;k++){

24                 if(visited[k]==false&&dist[u]+map[u][k]<dist[k])

25                     dist[k] = dist[u]+map[u][k];

26             }

27         }

28     }

29     

30     public static void main(String[] args){

31         Scanner in = new Scanner(System.in);

32         n = in.nextInt();

33         in.nextLine();

34         int map[][] = new int[n+1][n+1];

35         for(int i=0;i<=n;i++)

36             Arrays.fill(map[i],INF);

37         

38         for(int i=2;i<=n;i++){

39             String nums[] = in.nextLine().split(" ");

40             for(int j=1;j<i;j++){

41                 if(nums[j-1].equals("x"))

42                     continue;

43                 map[i][j]=map[j][i] = Integer.parseInt(nums[j-1]);

44             }

45         }

46         int dist[] = new int[n+1];

47         for(int i=2;i<=n;i++)

48             dist[i] = map[1][i];

49         visited = new boolean[n+1];

50         dij(map,dist);

51         int max=0;

52         for(int i=2;i<=n;i++)

53             if(dist[i]>max)

54                 max = dist[i];

55         System.out.println(max);

56     }

57 }

 

 1 import java.util.Scanner;

 2 import java.util.Arrays;

 3 /*

 4 bellman-ford

 5 */

 6 public class Main{

 7     static int INF = 0x3f3f3f3f;

 8     static int n;

 9     

10     public static void bf(int map[][],int dist[],int v){

11         for(int k=2;k<n;k++)

12             for(int u=1;u<=n;u++)

13                 if(u!=v)

14                     for(int i=1;i<=n;i++)

15                         if(i!=v&&dist[u]>dist[i]+map[i][u])

16                             dist[u] = dist[i]+map[i][u];

17             

18     }

19     

20     public static void main(String[] args){

21         Scanner in = new Scanner(System.in);

22         n = in.nextInt();

23         in.nextLine();

24         int map[][] = new int[n+1][n+1];

25         for(int i=0;i<=n;i++)

26             Arrays.fill(map[i],INF);

27         

28         for(int i=2;i<=n;i++){

29             String nums[] = in.nextLine().split(" ");

30             for(int j=1;j<i;j++){

31                 if(nums[j-1].equals("x"))

32                     continue;

33                 map[i][j]=map[j][i] = Integer.parseInt(nums[j-1]);

34             }

35         }

36         int dist[] = new int[n+1];

37         for(int i=2;i<=n;i++)

38             dist[i] = map[1][i];

39         bf(map,dist,1);

40         int max=0;

41         for(int i=2;i<=n;i++)

42             if(dist[i]>max)

43                 max = dist[i];

44         System.out.println(max);

45     }

46 }

 

你可能感兴趣的:(poj)