rootUser

DAG 2

Jul 9th, 2016
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int vis[100], cost[100], weight[100][100], par[100];
  6. vector <int> connectedNodes[100];
  7. stack <int> ans;
  8.  
  9. void topodfs(int x)
  10. {
  11.     vis[x]=1;
  12.     for(int i=0; i<connectedNodes[x].size(); i++)
  13.     {
  14.         if(!vis[connectedNodes[x][i]])
  15.         {
  16.             topodfs(connectedNodes[x][i]);
  17.         }
  18.     }
  19.     ans.push(x);
  20. }
  21.  
  22. void printPath(int x)
  23. {
  24.     if(par[x]==x)return;
  25.     printPath(par[x]);
  26.     printf("%d -> ", par[x]);
  27.     return;
  28. }
  29.  
  30. int main()
  31. {
  32.     int n, v, x, y, i, s;
  33.     printf("Enter the node number: ");
  34.     scanf("%d", &n);
  35.     printf("Enter the weight number: ");
  36.     scanf("%d", &v);
  37.     memset(vis, 0, sizeof(vis));
  38.     for(i=0; i<v; i++)
  39.     {
  40.         printf("Connection Between: ");
  41.         scanf("%d %d", &x, &y);
  42.         connectedNodes[x].push_back(y);
  43.         printf("Connection Cost: ");
  44.         scanf("%d", &weight[x][y]);
  45.     }
  46.     for(i=0; i<v; i++)
  47.     {
  48.         if(!vis[i])topodfs(i);
  49.     }
  50.     printf("Enter The Source: ");
  51.     scanf("%d", &s);
  52.     for(i=0; i<n; i++)
  53.     {
  54.         if(i==s)
  55.         {
  56.             cost[i]=0;
  57.             par[s]=s;
  58.         }
  59.         else
  60.         {
  61.             cost[i]=10000;
  62.             par[i]=-1;
  63.         }
  64.     }
  65.     while(!ans.empty())
  66.     {
  67.         int node = ans.top();
  68.         ans.pop();
  69.         for(i=0; i<connectedNodes[node].size(); i++)
  70.         {
  71.             if(cost[connectedNodes[node][i]] > cost[node]+weight[node][connectedNodes[node][i]])
  72.             {
  73.                 cost[connectedNodes[node][i]]=cost[node]+weight[node][connectedNodes[node][i]];
  74.                 par[connectedNodes[node][i]]=node;
  75.             }
  76.         }
  77.     }
  78.     for(i=0; i<n; i++)
  79.     {
  80.         printf("Node %d:\n ", i);
  81.         if(par[i]!=-1)
  82.         {
  83.             printf("Path: Start -> ");
  84.             printPath(i);
  85.             printf("%d\t\t\t", i);
  86.             printf("Cost: %d\n", cost[i]);
  87.         }
  88.         else printf("Cannot Reach\n");
  89.     }
  90.     return 0;
  91. }
Add Comment
Please, Sign In to add comment