VasilM

9a_BFS

Jan 9th, 2013
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int MAXN = 1000;
  5. int used[MAXN+1], Q[MAXN], P[MAXN], G[MAXN][MAXN], N, b, e;
  6.  
  7. void make_empty(){b=0;e=-1;}
  8. void push(int x){Q[++e]=x;}
  9. int pop(){return Q[b++];}
  10. bool emptyQ(){return b>e;}
  11.  
  12. void BFS(int r) {
  13.   int  x,y,i; for(i=1;i<=N;i++) used[i]=0;
  14.   make_empty();push(r);used[r]=1;P[r]=0;
  15.   while(!emptyQ()) {  
  16.     x=pop();
  17.     for(i=1;i<=G[x][0];i++) {  
  18.       y=G[x][i];
  19.       if(!used[y]) {push(y);used[y]=1;P[y]=x; cout<< y <<" ";}
  20.      }
  21.   }
  22. }
  23.  
  24.  
  25. int main(){
  26.  
  27.     int N;
  28.     while( cin >> N ){
  29.         int x,y;
  30.         for( int i=0; i<N; i++ ){
  31.             cin >> y >> x;
  32.             G[x][++G[x][0]] = y;
  33.             G[y][++G[y][0]] = x;
  34.         }
  35.         cout << 1 << " ";
  36.         BFS(1);
  37.         memset(used, 0, MAXN);
  38.         memset(Q, 0, MAXN);
  39.         memset(P, 0, MAXN);
  40.         memset(G, 0, MAXN*MAXN);
  41.         cout << endl;
  42.     }
  43.     return 0;
  44. }
  45. /*
  46. Задача 9а. [5.3.1] bfs.c
  47.  Напишете програма за обхождане на граф в ширина (BFS(1))
  48.  
  49. Вход:
  50. На входа се задава най-напред броя на дъгите на ориентиран граф, а после списък от тези дъги.
  51. Списъкът се състои от не повече от 1000 дъги, зададени с двойки номера на върхове - начало, край.
  52. Върховете на графа са номерирани с последователни цели положителни числа, започвайки от 1.
  53.  .
  54.  Изход:
  55.  Отпечатва се списък (редица) от върховете на графа, получени при обхождането му в ширина. Първият член на редицата трябва да бъде 1.
  56.  
  57.  Пример:
  58. 3
  59.  1 2
  60.  2 3
  61.  1 4
  62.  
  63. Решение на примера:
  64. 1 2 4 3
  65. */
Advertisement
Add Comment
Please, Sign In to add comment