Advertisement
Guest User

Untitled

a guest
Jan 28th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.36 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Scanner;
  4.  
  5.  
  6. public class solver {
  7.     static int n;
  8.     static int[] known;
  9.     static int[] shP;
  10.    
  11.     static boolean exist(String[] arr, String name){
  12.         for(int i=0;i<arr.length;i++){
  13.             if(arr[i].equals(name)) return true;
  14.         }
  15.         return false;
  16.     }
  17.    
  18.     static void solve(int[] known, int[] shP, int[][] list,ArrayList<Integer>[] adj, int src){
  19.         known[src] = 1;
  20.         //shP[src] = 0;
  21.         for(int i=0;i<adj[src].size();i++){
  22.             int we = adj[src].get(i);
  23.             if( shP[we] > list[src][we]){
  24.                 shP[we] = list[src][we];
  25.             }
  26.         }
  27.        
  28.         int min = 999999;
  29.         int indexTemp =0;
  30.         for(int i=0;i<shP.length;i++){
  31.             if(shP[i]<min) {
  32.                 min = shP[i];
  33.                 indexTemp = i;
  34.             }
  35.         }
  36.         solve(known, shP, list,adj, indexTemp);
  37.     }
  38.    
  39.    
  40.     public static void main(String[] args) {
  41.         Scanner in = new Scanner(System.in);
  42.        
  43.         n = in.nextInt(); //nr of vertex
  44.         known = new int[n];
  45.         shP = new int[n];
  46.        
  47.         Edge[] edges = new Edge[n];
  48.        
  49.        
  50.         for(int i=0;i<n;i++) shP[i] = (int) Double.POSITIVE_INFINITY;
  51.        
  52.         for(int i=0; i<n;i++){
  53.             String c1 = in.next();
  54.             String c2 = in.next();
  55.             int w = in.nextInt();
  56.             edges[i]= new Edge(c1, c2, w);
  57.         }
  58.        
  59.         int cnt=0;
  60.         String[] V = new String[n];
  61.         for(int i=0;i<n;i++) V[i]="";
  62.        
  63.         int [][] list = new int[n][n];
  64.        
  65.         for(int i=0;i<n;i++) {
  66.             for(int j=0;j<n;j++){
  67.                 list[i][j]= (int) Double.POSITIVE_INFINITY;
  68.             }
  69.         }
  70.        
  71.         ArrayList<Integer>[] adj = (ArrayList<Integer>[])new ArrayList[n];
  72.         for(int i=0; i<n;i++){
  73.             String c1 = edges[i].from;
  74.             String c2 = edges[i].target;
  75.            
  76.             if(!exist(V, c1)){
  77.                 V[cnt] = c1;
  78.                 cnt++;
  79.             }
  80.             if(!exist(V, c2)){
  81.                 V[cnt] = c2;
  82.                 cnt++;
  83.             }
  84.            
  85.             int indOfc1 = Arrays.asList(V).indexOf(c1);
  86.             int indOfc2 = Arrays.asList(V).indexOf(c2);
  87.            
  88.             if(adj[indOfc1] == null) adj[indOfc1] = new ArrayList<Integer>();
  89.             adj[indOfc1].add(indOfc2);
  90.            
  91.             list[indOfc1][indOfc2] = edges[i].weight;
  92.         }
  93.        
  94.         String source = in.next();
  95.         String dest = in.next();
  96.         int indOfsrc = Arrays.asList(V).indexOf(source);
  97.         int indOfdest = Arrays.asList(V).indexOf(dest);
  98.        
  99.         solve(known, shP, list,adj, indOfsrc);
  100.        
  101.         System.out.print(shP[indOfdest]);
  102.     }
  103.  
  104. }
  105. class Edge{
  106.     String from;
  107.     String target;
  108.     int weight;
  109.     Edge(String s, String t, int w){
  110.         from = s;
  111.         target = t;
  112.         weight = w;
  113.     }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement