数据结构之深度搜索

来源:互联网 发布:华硕路由器80端口 编辑:程序博客网 时间:2024/05/12 06:37
#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;}

0 0
原创粉丝点击