-
Notifications
You must be signed in to change notification settings - Fork 0
/
DFS.cpp
100 lines (83 loc) · 1.77 KB
/
DFS.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// #include <iostream>
// #include <cstdlib>
// #include <vector>
// #include <map>
// std::vector<int> list[50];
// std::map<int, int> visited;
// int p,q,start;
// int num;
// void dfs(int n)
// {
// // if(visited[n])
// // {
// // std::cout<<"visited "<<n<<std::endl; //time: O(V+E)
// // return; //space: O(V)
// // }
// visited[n] = n;
// std::cout<<n<<std::endl; //pre order
// for(int x :list[n])
// {
// if(!visited[x]) dfs(x);
// }
// //std::cout<<n<<std::endl; //post order
// }
// int main()
// {
// std::cout<<"Enter the number of adjacency list members:"<<std::endl;
// std::cin>>num;
// std::cout<<"Enter the adjacency list members of directed graph:"<<std::endl;
// for(int i=0; i<num; i++)
// {
// std::cin>>p>>q;
// list[p].push_back(q);
// }
// std::cout<<"Enter the node to search from"<<std::endl;
// std::cin>>start;
// dfs(start);
// return 0;
// }
//using stack
#include <iostream>
#include <cstdlib>
#include <vector>
#include <stack>
#include <map>
std::vector<int> list[50];
std::map<int, int> visited;
std::stack<int> stack;
int p,q,start;
int num;
void dfs(int n)
{
stack.push(n);
while(!stack.empty())
{
n = stack.top();
stack.pop();
if(!visited[n])
{
std::cout<<n<<std::endl; //pre order
visited[n] = n;
}
for(int i : list[n])
{
if(!visited[i]) stack.push(i);
}
}
//std::cout<<n<<std::endl; //post order
}
int main()
{
std::cout<<"Enter the number of adjacency list members:"<<std::endl;
std::cin>>num;
std::cout<<"Enter the adjacency list members of directed graph:"<<std::endl;
for(int i=0; i<num; i++)
{
std::cin>>p>>q;
list[p].push_back(q);
}
std::cout<<"Enter the node to search from"<<std::endl;
std::cin>>start;
dfs(start);
return 0;
}