Advertisement
FahimFaisal

dijkstra_adjacencyList_2020

Mar 11th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package Contest;
  7.  
  8. import java.util.LinkedList;
  9. import java.util.Scanner;
  10.  
  11. /**
  12.  *
  13. 3 5
  14. 0 1 10
  15. 1 2 10
  16. 2 1 100
  17. 2 0 200
  18. 1 0 300
  19.  * @author acer
  20.  */
  21. public class dijkstra {
  22.     public static int [] d;
  23.     public static int [] parent;
  24.      public static int [] color;
  25.      public static int node;
  26.      public static int edge;
  27.      public static LinkedList[]l;
  28.      
  29.      public static void main(String[] args) {
  30.        
  31.         Scanner sc=new Scanner(System.in);
  32.          node=sc.nextInt();
  33.          edge=sc.nextInt();
  34.        
  35.          l=new LinkedList[node];
  36.        
  37.         for(int i=0;i<node;i++)
  38.             l[i]=new LinkedList<String>();
  39.        
  40.         for(int i=0;i<edge;i++){
  41.             int x=sc.nextInt();
  42.             int y=sc.nextInt();
  43.             int w=sc.nextInt();
  44.             l[x].add(y+","+w);
  45.         }
  46.        
  47.         for(int i=0;i<node;i++){
  48.             System.out.println(i+"==>");
  49.             for(int j=0;j<l[i].size();j++){
  50.                 System.out.println(l[i].get(j).toString());
  51.             }
  52.         }
  53.        int [] d1=new int[node];
  54.        d1=dijkstra(0);
  55.          System.out.println();
  56.        for(int k:d1){
  57.            System.out.println(k);
  58.        }
  59.        
  60.     }
  61.      public static int[] dijkstra(int s) {
  62.          int [] d=new int[node];
  63.          parent=new int[node];
  64.          color=new int[node];
  65.          
  66.          for(int i=0;i<node;i++){
  67.              d[i]=Integer.MAX_VALUE;
  68.              parent[i]=-1;
  69.              color[s]=0;
  70.          }
  71.          d[s]=0;
  72.          //color[s]=1;
  73.          
  74.          for(int i=0;i<node;i++){
  75.              int u=extractMin(d);
  76.                for(int v=0;v<l[u].size();v++){
  77.                  String [] splitA;
  78.                  String str=l[u].get(v).toString();
  79.                  splitA=str.split(",");
  80.                  
  81.                  int to=Integer.parseInt(splitA[0]);
  82.                  int dist=Integer.parseInt(splitA[1]);
  83.                  if(color[to]!=1 && d[u]!=Integer.MAX_VALUE &&((d[u]+dist)<d[to])){
  84.                      d[to]=d[u]+dist;
  85.                      parent[to]=u;
  86.                  }
  87.                
  88.              }
  89.              //color[u]=1;  
  90.              System.out.print(u+"=>");
  91.          }
  92.    
  93.          
  94.          
  95.        return d;  
  96.        
  97.     }
  98.      public static int extractMin(int []d) {
  99.          int min=Integer.MAX_VALUE;
  100.          int idx=-1;
  101.          for(int k=0;k<node;k++){
  102.              if(color[k]!=1 && d[k]<=min){
  103.                  min=d[k];
  104.                  idx=k;
  105.              }
  106.          }
  107.          color[idx]=1;
  108.          return idx;
  109.        
  110.     }
  111.    
  112.    
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement