Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //DFS
- #include<iostream>
- //#include<cstdlib>
- #include<stack>
- using namespace std;
- /*
- 8 7 1 5
- 1 2
- 1 3
- 2 3
- 2 4
- 3 5
- 4 6
- 7 8
- */
- stack <int> st;
- int n, m, dau, cuoi, *trace;
- bool **a, *s;
- void nhap(){
- cin>> n >> m >> dau >> cuoi;
- dau--; cuoi--;
- trace = new int [n];
- s = new bool [n];
- a = new bool *[n];
- for( int i = 0; i < n; i++) a [i] = new bool [n];
- int u, v, i, j;
- for(i = 0; i < n; i++){
- s [i] = true;
- for(j = 0; j < n; j++) a [i] [j] = false;
- }
- for(i = 0; i < m; i++){
- cin>> u >> v;
- u-- ; v--;
- a [u][v] = true;
- a [v][u] = true;
- }
- trace [dau] = -1;
- }
- void DFS(){
- int u, i, j = 1;
- st.push(dau); s [dau] = false;
- do{
- u = st.top();
- // if(u == cuoi) return;
- for(i = 0; i < n; i++) if(s [i] && a [u][i]){
- s [i] = false;
- cout << i + 1 << " ";
- st.push(i);
- trace [i] = u;
- break;
- }
- if(i >= n) st.pop();
- }
- while(!st.empty());
- }
- /*
- void res(){
- if(st.empty()) return;
- if(st.top() == dau){
- cout<< st.top()+1 <<" ";
- st.pop();
- return ;
- }
- int u = st.top();
- st.pop();
- res();
- cout<< u + 1 <<" ";
- }
- */
- void res(int i){
- if(trace [i] >= 0) res(trace [i]);
- cout<< i+1 <<" ";
- }
- int main(){
- nhap();
- cout << dau + 1 <<" can visit : " << dau + 1 << " ";
- DFS();
- cout<<endl;
- res(cuoi);
- delete []s;
- for(int i = 0; i < n; i++) delete []a[i];
- delete []a;
- delete []trace;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement