#include<list>
#include<iostream>
//Program to print BFS traversal from a given source vertex. BFS(int s)
//traverses vertices reachable from s
using namespace std;
//The class represents a directed graph using adjacency lists
typedef struct Node {
bool isVisted;
int value;
};
class Graph {
int V; //No. of vertices
list<Node> *adj;
public:
Graph(int V); //Constructor
~Graph();
void addEdge(int v, int w); //function to add an edge to graph
void BFS(int s); //print BFS traversal from a given source s
void OutGraph();
void DFS(list<Node> *p);
void doSearchDFS();
bool *vistSigned;
};
Graph::Graph(int V) {
this->V = V;
adj = new list<Node>[V];
vistSigned = new bool[V];
for (size_t i = 0; i < V; i++)
{
vistSigned[i] = false;
}
}
Graph::~Graph() {
if (vistSigned != nullptr)
{
delete[]vistSigned;
vistSigned = nullptr;
}
delete[]adj;
}
void Graph::addEdge(int v, int w)
{
Node t;
t.isVisted = false;
t.value = w;
adj[v].push_back(t);
}
void Graph::doSearchDFS()
{
this->DFS(&adj[2]);
}
void Graph::DFS(list<Node> *p)
{
if (p == nullptr) return;
list<Node>::iterator it = p->begin();
for (; it != p->end(); it++)
{
if (vistSigned[(*it).value] == false)
{
vistSigned[(*it).value] = true;
cout << "value: " << (*it).value << endl;
this->DFS(&adj[(*it).value]);
}
}
}
int main()
{
// Create a graph given in the above diagram
Graph g(4);
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 << "Following is Breadth First Traversal (starting from vertex 2) \n";
g.doSearchDFS();
return 0;
}
数据结构之深度搜索
最新推荐文章于 2024-03-05 19:56:46 发布