lelouche29

Dijkstra

Sep 25th, 2019
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. int n;
  6. int a[1000][1000];
  7.  
  8. //function to calculate the shortest distance
  9. int shortestDistance(int distance[], bool splset[]){
  10.     int min=INT_MAX, min_idx;
  11.     for(int v=0; v<n; v++){
  12.         if(splset[v]==false && distance[v]<=min)
  13.             min=distance[v], min_idx=v;
  14.     }
  15.     return min_idx;
  16. }
  17.  
  18. void print_solution(int distance[]){
  19.     for(int i=0; i<n; i++)
  20.         cout<<i<<" " <<distance[i]<<endl;
  21. }
  22.  
  23. void djkastra(int src){
  24.     int distance[1000];
  25.     bool splset[1000];
  26.  
  27.     for(int i=0; i<n; i++)
  28.         distance[i]=INT_MAX, splset[i]=false;
  29.    
  30.     distance[src]=0;
  31.     for(int i=0; i<n-1; i++){
  32.         int u=shortestDistance(distance,splset);
  33.         splset[u]=true;
  34.  
  35.         for(int v=0; v<n; v++){
  36.             if(!splset[v] && a[u][v] && distance[u]!=INT_MAX && distance[u] + a[u][v] < distance[v])
  37.                 distance[v] = distance[u] + a[u][v];
  38.         }
  39.     }
  40.     print_solution(distance);
  41. }
  42.  
  43. int main() {
  44.     int t;
  45.     cin>>t;
  46.     while(t--){
  47.         cin>>n;
  48.  
  49.         for(int i=0; i<n; i++)
  50.             for(int j=0; j<n; j++)
  51.                 cin>>a[i][j];
  52.  
  53.         djkastra(0);  
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment