Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- const int MAXN = 1000;
- int U[MAXN+1], P[MAXN], G[MAXN][MAXN], V[MAXN], ind=0 ;
- void DFS(int r)
- { int y;
- U[r]=1;
- while(G[r][0]>0)
- { y=G[r][G[r][0]--];
- if(!U[y]) {U[y]=1; P[y]=r; DFS(y); V[++ind]= y; }
- }
- }
- int main(){
- int N;
- while( cin >> N ){
- int x,y;
- for( int i=0; i<N; i++ ){
- cin >> y >> x;
- G[x][++G[x][0]] = y;
- G[y][++G[y][0]] = x;
- }
- cout << 1 << " ";
- DFS(1);
- for(int i=ind; i>0; i--) cout<< V[i] << " ";
- ind=0;
- memset(U, 0, MAXN);
- memset(P, 0, MAXN);
- memset(G, 0, MAXN*MAXN);
- memset(V, 0, MAXN);
- cout << endl;
- }
- return 0;
- }
- /*
- Задача 9b. [5.3.2] dfs.c
- Обхождане на граф в дълбочина (DFS(1)),
- Вход:
- На входа се задава най-напред броя на дъгите на ориентиран граф, а после списък от тези дъги.
- Списъкът се състои от не повече от 1000 дъги, зададени с двойки номера на върхове - начало, край.
- Върховете на графа са номерирани с последователни цели положителни числа, започвайки от 1.
- .
- Изход:
- Отпечатва се списък (редица) от върховете на графа, получени при обхождането му в дълбочина.
- Първият член на редицата трябва да бъде 1.
- Пример:
- 3
- 1 2
- 2 3
- 1 4
- Решение на примера:
- 1 2 3 4
- */
Advertisement
Add Comment
Please, Sign In to add comment