Advertisement
jzh4n

Breadth First Search

May 27th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4.  
  5. int num_of_vertex;
  6. int *map;
  7. bool *visited_vertex;
  8. int (*table)[2];
  9. int *previous;
  10. std::queue<int> q;
  11.  
  12. void BFS(int start, int end) {
  13.     q.push(start);
  14.     visited_vertex[0] = true;
  15.  
  16.     while(!q.empty()) {
  17.         int vertex = q.front();
  18.         q.pop();
  19.         visited_vertex[vertex] = true;
  20.  
  21.         for(int i = 0; i < num_of_vertex; ++i) {
  22.             if(map[vertex * num_of_vertex + i] > 0 and visited_vertex[i] == false) {
  23.                 //std::cout << vertex << " " << i << "\n";
  24.                 q.push(i);
  25.                 previous[i] = vertex;
  26.             }
  27.         }
  28.     }
  29.  
  30.     /*
  31.     int i = num_of_vertex - 1;
  32.     while(previous[i]) {
  33.         std::cout << i << " ";
  34.  
  35.         i = previous[i];
  36.     }*/
  37.  
  38.     for(int i = 0; i < num_of_vertex; ++i) {
  39.         std::cout << previous[i] << " ";
  40.     }
  41. }
  42.  
  43. int main() {
  44.     int num_of_edge;
  45.  
  46.     std::cin >> num_of_vertex;
  47.     std::cin >> num_of_edge;
  48.  
  49.     map = new int[num_of_vertex * num_of_vertex];
  50.  
  51.     int n = num_of_vertex * num_of_vertex;
  52.     for(int i = 0; i < n; ++i) map[i] = 0;
  53.  
  54.     visited_vertex = new bool[num_of_vertex];
  55.     for(int i = 0; i < num_of_vertex; ++i)
  56.         visited_vertex[i] = false;
  57.  
  58.     previous = new int[num_of_vertex];
  59.     for(int i = 0; i < num_of_vertex; ++i)
  60.         previous[i] = -1;
  61.  
  62.     int source, destination, weight;
  63.     for(int i = 0; i < num_of_edge; ++i) {
  64.         std::cin >> source;
  65.         std::cin >> destination;
  66.         std::cin >> weight;
  67.  
  68.         map[source + destination * num_of_vertex] = weight;
  69.         map[destination + source * num_of_vertex] = weight;
  70.     }
  71.  
  72.     BFS(0, num_of_vertex - 1);
  73.  
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement