Performing Breadth First Search recursively

后端 未结 21 2600
不思量自难忘°
不思量自难忘° 2020-11-28 01:12

Let\'s say you wanted to implement a breadth-first search of a binary tree recursively. How would you go about it?

Is it possible using only the call-stack

21条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-28 01:53

    I have made a program using c++ which is working in joint and disjoint graph too .

        #include 
    #include "iostream"
    #include "vector"
    #include "queue"
    
    using namespace std;
    
    struct Edge {
        int source,destination;
    };
    
    class Graph{
        int V;
        vector> adjList;
    public:
    
        Graph(vector edges,int V){
            this->V = V;
            adjList.resize(V);
            for(auto i : edges){
                adjList[i.source].push_back(i.destination);
                //     adjList[i.destination].push_back(i.source);
            }
        }
        void BFSRecursivelyJoinandDisjointtGraphUtil(vector &discovered, queue &q);
        void BFSRecursivelyJointandDisjointGraph(int s);
        void printGraph();
    
    
    };
    
    void Graph :: printGraph()
    {
        for (int i = 0; i < this->adjList.size(); i++)
        {
            cout << i << " -- ";
            for (int v : this->adjList[i])
                cout <<"->"<< v << " ";
            cout << endl;
        }
    }
    
    
    void Graph ::BFSRecursivelyJoinandDisjointtGraphUtil(vector &discovered, queue &q) {
        if (q.empty())
            return;
        int v = q.front();
        q.pop();
        cout << v <<" ";
        for (int u : this->adjList[v])
        {
            if (!discovered[u])
            {
                discovered[u] = true;
                q.push(u);
            }
        }
        BFSRecursivelyJoinandDisjointtGraphUtil(discovered, q);
    
    }
    
    void Graph ::BFSRecursivelyJointandDisjointGraph(int s) {
        vector discovered(V, false);
        queue q;
    
        for (int i = s; i < V; i++) {
            if (discovered[i] == false)
            {
                discovered[i] = true;
                q.push(i);
                BFSRecursivelyJoinandDisjointtGraphUtil(discovered, q);
            }
        }
    }
    
    int main()
    {
    
        vector edges =
                {
                        {0, 1}, {0, 2}, {1, 2}, {2, 0}, {2,3},{3,3}
                };
    
        int V = 4;
        Graph graph(edges, V);
     //   graph.printGraph();
        graph.BFSRecursivelyJointandDisjointGraph(2);
        cout << "\n";
    
    
    
    
        edges = {
                {0,4},{1,2},{1,3},{1,4},{2,3},{3,4}
        };
    
        Graph graph2(edges,5);
    
        graph2.BFSRecursivelyJointandDisjointGraph(0);
        return 0;
    }
    

提交回复
热议问题