ryuk2603

Hackerrank(Breadth First Search: Shortest Reach)

Nov 6th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. // Hackerrank: Breadth First Search: Shortest Reach
  2. // https://www.hackerrank.com/challenges/bfsshortreach/problem
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5.  
  6. void shortestReach(vector<int> graph[], int n, int source)
  7. {
  8.     bool visited[n+1];
  9.     int level[n+1] = {-1};
  10.     memset(visited, false, sizeof(visited));
  11.     queue<int> q;
  12.     q.push(source);
  13.     level[source] = 0;
  14.     visited[source] = true;
  15.     while(!q.empty()){
  16.         int cur = q.front();
  17.         q.pop();
  18.         for(int i=0; i<graph[cur].size(); i++){
  19.             if(!visited[graph[cur][i]]){
  20.                 level[graph[cur][i]] = level[cur] + 6;
  21.                 q.push(graph[cur][i]);
  22.                 visited[graph[cur][i]] = true;
  23.             }
  24.         }
  25.     }
  26.     for(int i=1; i<=n; i++){
  27.         if(i == source) continue;
  28.         else{
  29.             if(level[i] == 0) printf("-1 ");
  30.             else printf("%d ", level[i]);
  31.         }
  32.     }
  33.     printf("\n");
  34. }
  35.  
  36. int main()
  37. {
  38.     //freopen("shortestReach.txt", "r", stdin);
  39.     int q;
  40.     scanf("%d", &q);
  41.     while(q--){
  42.         int n, m, u, v, source;
  43.         scanf("%d %d", &n, &m);
  44.         vector<int> graph[n+1];
  45.         for(int i=0; i<m; i++){
  46.             scanf("%d %d", &u, &v);
  47.             graph[u].push_back(v);
  48.             graph[v].push_back(u);
  49.         }
  50.         scanf("%d", &source);
  51.         shortestReach(graph, n, source);
  52.         for(int i=0; i<n; i++) graph[i].clear();
  53.     }
  54.     return 0;
  55. }
Add Comment
Please, Sign In to add comment