Advertisement
Guest User

627Uvaoj.cpp

a guest
May 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int>adj[100000];
  5. int visited[100000];
  6. int level[100000];
  7. int p[100000];
  8. int flag=1;
  9. int path[100000];
  10. int bfs(int s, int e, int n)
  11. {
  12. queue<int>Q;
  13. Q.push(s);
  14. visited[s]=1;
  15. p[s]=s;
  16.  
  17. while(!Q.empty())
  18. {
  19. if(visited[e]==1)
  20. break;
  21. int u=Q.front();
  22. Q.pop();
  23. for(int i=0; i<adj[u].size(); i++)
  24. {
  25. int v=adj[u][i];
  26. if(visited[v]==0)
  27. {
  28. visited[v]=1;
  29. Q.push(v);
  30. p[v]=u;
  31. }
  32. }
  33. }
  34.  
  35. if(p[e]==0)
  36. {
  37. cout<<"connection impossible"<<endl;
  38. flag=0;
  39. return 0;
  40. }
  41. else
  42. {
  43.  
  44. int now=e;
  45. int i=0;
  46. path[i++]=e;
  47. while(now!=s)
  48. {
  49. now=p[now];
  50. path[i++]=now;
  51. }
  52. reverse(path, path+i);
  53. return i;
  54. }
  55. return 0;
  56.  
  57.  
  58. }
  59. int main()
  60. {
  61. int n;
  62. char garbage;
  63. while((cin>>n) and n)
  64. {
  65. int m=n;
  66. cout<<"-----"<<endl;
  67. for(int i=0; i<m+5; i++)
  68. adj[i].clear();
  69. while(n--)
  70. {
  71. string line;
  72. int connected;
  73. int node;
  74. cin>>node;
  75. getline(cin,line);
  76. stringstream ss(line);
  77. while(ss>>garbage>>connected)
  78. {
  79. adj[node].push_back(connected);
  80. }
  81. }
  82.  
  83. fill(visited, visited+m+5,0);
  84. fill(level, level+m+5,0);
  85. fill(p, p+m+5,0);
  86. int t;
  87. cin>>t;
  88. while(t--)
  89. {
  90. int a, b;
  91. cin>>a>>b;
  92. int i=bfs(a, b, m);
  93.  
  94. if(flag)
  95. {
  96. int path_size;
  97. path_size=sizeof(path)/sizeof(int);
  98. for(int j=0; j<i; j++)
  99. {
  100. cout<<path[j];
  101. if(j!=i-1)
  102. cout<<" ";
  103. }
  104. cout<<endl;
  105. }
  106. flag=1;
  107. fill(visited, visited+m+5,0);
  108. fill(level, level+m+5,0);
  109. fill(p, p+m+5,0);
  110.  
  111. }
  112.  
  113. }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement