Reference:
http://www.geeksforgeeks.org/depth-first-traversal-for-a-graph/
// C++ program to print DFS traversal for a given given graph
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
class Graph
{
int V; // No. of vertices
list<int> *adj; // Pointer to an array containing adjacency lists
void DFSUtil(int v, bool visited[]); // A function used by DFS
public:
Graph(int V); // Constructor
void addEdge(int v, int w); // function to add an edge to graph
void DFS(); // prints DFS traversal of the complete graph
void DFS(int v);
};
Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w); // Add w to v’s list.
}
void Graph::DFSUtil(int v, bool visited[])
{
// Mark the current node as visited and print it
visited[v] = true;
cout << v << " ";
// Recur for all the vertices adjacent to this vertex
list<int>::iterator i;
for(i = adj[v].begin(); i != adj[v].end(); ++i)
if(!visited[*i])
DFSUtil(*i, visited);
}
// DFS traversal of the vertices reachable from v.
// It uses recursive DFSUtil()
void Graph::DFS(int v)
{
// Mark all the vertices as not visited
bool *visited = new bool[V];
for (int i = 0; i < V; i++)
visited[i] = false;
// Call the recursive helper function to print DFS traversal
// starting from specified vertix v
DFSUtil(v, visited);
}
// The function to do DFS traversal. It uses recursive DFSUtil()
void Graph::DFS()
{
// Mark all the vertices as not visited
bool *visited = new bool[V];
for (int i = 0; i < V; i++)
visited[i] = false;
// Call the recursive helper function to print DFS traversal
// starting from all vertices one by one
for (int i = 0; i < V; i++){
std::fill_n(visited, V, false); //reset all elements to false
if (visited[i] == false){
cout<<"starting node="<<i<<":";
DFSUtil(i, visited);
}
cout<<endl;
}
}
int main()
{
// Create a graph given in the above diagram
const int V = 4;
Graph g(V);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
cout << "\nFollowing is DFS Traversal result when tarting at node 2:\n";
g.DFS(2);
cout << "\nFollowing is DFS Traversal result when starting at each node 0~"<< V<<":\n";
g.DFS( );
return 0;
}
//Result is:
Following is DFS Traversal result when tarting at node 2:
2 0 1 3
Following is DFS Traversal result when starting at each node 0~4:
starting node=0:0 1 2 3
starting node=1:1 2 0 3
starting node=2:2 0 1 3
starting node=3:3
'via Blog this'
Blog Archive
-
▼
2017
(115)
-
▼
February
(16)
- 杭州Rokid团队是什么? - 机器人 - 知乎
- 客中守岁(在柳家庄) -- 唐代春运
- Depth First Traversal or DFS for a Graph
- Resident Alien Claiming a Treaty Exemption for a S...
- 澜声科技有限公司
- 广告配音_广告配音服务_合成配音-配音阁,国内最专业的广告配音平台
- TensorFlow极速入门 | 雷锋网
- (2) What is the best text to speech software? - Quora
- 微信摇一摇电视的技术原理是什么?有没有相类似的APP? - 支付宝 - 知乎
- Kaldi的I/O机制 | Chinese Doc of Kaldi
- algorithms/theory.md at master · skseth/algorithms
- How can I become an expert at C++ quickly? - progr...
- As a programmer, what things impress on a resume?
- Google C++ Style Guide
- 谷歌云官方:一小时掌握深度学习和TensorFlow(视频+50PPT) | 新智元 | 数据观 |...
- Passing Arrays By Reference (debug)
-
▼
February
(16)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment