Advertisement
Guest User

bfs

a guest
Feb 19th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. const int rozmiar = 1000 * 100 + 10;
  7. int poprzedni[rozmiar];
  8. bool was[rozmiar];
  9. int d[rozmiar];
  10.  
  11. vector<int> graph[rozmiar];
  12.  
  13. int x, y;
  14. int n, m, q;
  15.  
  16. void bfs(int v ){
  17. queue<int> q;
  18. q.push(v);
  19.  
  20. while (q.size ()){
  21. int top = q.front (); q.pop ();
  22. was[top] = true;
  23.  
  24. for(int i = 0; i < graph[top].size (); i ++)
  25. {
  26. int u = graph[top][i];
  27.  
  28. if (!was[u]){
  29. was[u] = true;
  30. poprzedni[u] = top;
  31. d[u] = d[top] + 1;
  32. q.push(u);
  33. }
  34. if (u == y)
  35. break;
  36. }
  37. }
  38.  
  39. //cout << "here" << endl;
  40. if (!d[y]){
  41. cout << -1 << "\n";
  42. }
  43. else {
  44. vector<int> ver;
  45. ver.push_back(y);
  46. int pom = y;
  47.  
  48. while (poprzedni[y] != 0){
  49. y = poprzedni[y];
  50. ver.push_back(y);
  51. }
  52.  
  53. cout << d[pom] << " ";
  54. for(int i = -1 + ver.size (); i >= 0; i --){
  55. cout << ver[i] << " ";
  56. }
  57. cout << "\n";
  58. }
  59. for(int i = 0; i <= n; i ++){
  60. was[i] = 0;
  61. d[i] = 0;
  62. poprzedni[i] = 0;
  63. }
  64. }
  65.  
  66. int main (){
  67. ios_base::sync_with_stdio(false);cin.tie();cout.tie();
  68. cin >> n >> m >> q;
  69.  
  70. for(int i = 0; i < m; i ++){
  71. int v1, v2;
  72. cin >> v1 >> v2;
  73. graph[v1].push_back(v2);
  74. graph[v2].push_back(v1);
  75. }
  76.  
  77. for(int i = 0; i < q; i ++)
  78. {
  79. cin >> x >> y;
  80. if (x == y ){
  81. cout << "0 " << x << "\n";
  82. }
  83. else
  84. bfs(x);
  85.  
  86. }
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement