Advertisement
adnan_dipta89

BFS

Oct 21st, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long int ll;
  4. enum color {WHITE,GRAY,BLACK};
  5.  
  6. vector<ll> vertex_color;
  7. vector<ll> _distance;
  8. vector<ll> parent;
  9. vector<vector<ll>> adjList;
  10. ll N,M;
  11.  
  12. void BFS(ll N,ll s)
  13. {
  14.     vertex_color.clear();
  15.     vertex_color.resize(N+1);
  16.     _distance.clear();
  17.     _distance.resize(N+1);
  18.     parent.clear();
  19.     parent.resize(N+1);
  20.  
  21.     queue<ll> q;
  22.     for(ll i = 1; i <= N; i++)
  23.     {
  24.         vertex_color[i] = WHITE;
  25.         _distance[i] = -1;
  26.         parent[i] = 0;
  27.     }
  28.     vertex_color[s] = GRAY;
  29.     _distance[s] = 0;
  30.     parent[s] = 0;
  31.     q.push(s);
  32.  
  33.     while(!q.empty())
  34.     {
  35.         ll u = q.front();
  36.         q.pop();
  37.         for(ll i = 0; i < adjList[u].size(); i++)
  38.         {
  39.             ll v = adjList[u][i];
  40.             if(vertex_color[v] == WHITE)
  41.             {
  42.                 vertex_color[v] = GRAY;
  43.                 _distance[v] = _distance[u]+6;
  44.                 parent[v] = u;
  45.                 q.push(v);
  46.             }
  47.         }
  48.         vertex_color[u] = BLACK;
  49.     }
  50. }
  51. int main()
  52. {
  53.     int q;
  54.     cin >> q;
  55.     while(q--)
  56.     {
  57.         ll s;
  58.         cin >> N >> M;
  59.         adjList.resize(N+1);
  60.         for(int i = 0; i < M; i++)
  61.         {
  62.             int u,v;
  63.             cin >> u >> v;
  64.             adjList[u].push_back(v);
  65.             adjList[v].push_back(u);
  66.         }
  67.         cin >> s;
  68.         BFS(N,s);
  69.         for(int i = 1; i <= N; i++)
  70.         {
  71.             if(i!=s)
  72.                 cout << _distance[i] << " ";
  73.         }
  74.         cout << endl;
  75.         for(int i = 0; i <= N; i++)
  76.             adjList[i].clear();
  77.         adjList.clear();
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement