Advertisement
aurko96

Shortest path dfs

Nov 21st, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int>v[1005];
  4. int dis[1001],val[1000][1000];
  5. void dfs(int s,int w)
  6. {
  7.     if(dis[s]<w)
  8.     {
  9.         return;
  10.     }
  11.     else
  12.     {
  13.         dis[s]=w;
  14.     }
  15.     for(int i=0;i<v[s].size();i++)
  16.     {
  17.         int x=v[s][i];
  18.         dfs(x,w+val[s][x]);
  19.     }
  20.     return;
  21. }
  22. int main()
  23. {
  24.     int a,b,c,d,e,i,j,n,s,x,y,z,t,w;
  25.     scanf("%d",&t);
  26.     for(i=0;i<t;i++)
  27.     {
  28.         for(j=0;j<=1000;j++)
  29.         {
  30.             v[j].clear();
  31.         }
  32.         for(j=0;j<1001;j++)
  33.         {
  34.             dis[j]=1000000000;
  35.         }
  36.         scanf("%d %d",&n,&e);
  37.         for(j=0;j<e;j++)
  38.         {
  39.             scanf("%d %d",&x,&y);
  40.             val[x][y]=val[y][x]=1;
  41.             v[x].push_back(y);
  42.             v[y].push_back(x);
  43.         }
  44.         scanf("%d",&s);
  45.         dfs(s,0);
  46.         for(j=0;j<=n;j++)
  47.         {
  48.             if(j==s)
  49.             {
  50.                 continue;
  51.             }
  52.             if(dis[j]==1000000000)
  53.             {
  54.                 printf("-1 ");
  55.             }
  56.             else
  57.             {
  58.                 printf("%d ",dis[j]);
  59.             }
  60.         }
  61.         printf("\n");
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement