码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1502

时间:2015-05-17 20:09:15      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

题意:
给你一个不完全的矩阵,数字表示权值,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 1502

标签:

原文地址:http://www.cnblogs.com/yong-hua/p/4510217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!