VasilM

9b_DFS

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