DFS和BFS C ++

时间:2019-12-11 16:25:26

标签: c++ recursion depth-first-search breadth-first-search

我在代码中找不到错误。当我在终端中运行它时,它会显示警告消息,而不是错误,但仍不显示任何结果。我正在使用dfsrecursive,BFS,bfs helper和DFS函数。请帮忙!

void
Graph::dfs()
{
    // reset the labels of all nodes and edges, then calls dfsRecursive on every unexplored node


    Node* v=0;

    resetLabels();

    map<string, Node*>::iterator w;


    vector<Edge*> incidentEdges;

    for(w= this->nodeTable->begin(); w != this-> nodeTable-> end(); w++)
    {
        if(w->second->getLabel() == (NodeLabel::unexplored))
            dfsRecursive(w->second);
    }

    }

    void
    Graph::dfsRecursive(Node* v)
     {
    // recursively perform a depth-first search starting from the input node v.


    vector<Edge*> incidentEdges = v->getIncidentEdges();

    for(int e=0; e < incidentEdges.size(); e++)
    {
        if(incidentEdges[e]-> getLabel() == EdgeLabel::unexplored){


            Node* w = incidentEdges[e]-> opposite(v);
            if(w->getLabel() == NodeLabel::unexplored){

                incidentEdges[e]-> getLabel() == (EdgeLabel::discovery);
                w-> setLabel(NodeLabel::visited);
            }

        }

        else
            incidentEdges[e]-> setLabel(EdgeLabel::back);

        }

    }

    void
    Graph::bfs()
    {


    int size = 0;
    int* bfsarray[size];

    int begin = 0;
    int** adjMatrix;
    int noOfNodes;

    bool* visited = new bool[noOfNodes];

    for(int i =0; i <noOfNodes; i++)
    {

        visited[i] = false;

        list<int> queue;
        visited[begin] =true;
        queue.push_back(begin);

        while(!queue.empty()){

            begin  = queue.front();
            cout << begin;

            queue.pop_front();
            for(int i =0; i < noOfNodes; i++){

                if(adjMatrix[begin][i] == 1 && !visited[i]){

                    visited[i] = true;
                    queue.push_back(i);
                }


            }

        }

    }




    }

    void
    Graph::bfsHelper(Node* s)
   {

    vector<Edge*> incidentEdges = s-> getIncidentEdges();
    if(s->getLabel() == NodeLabel::unexplored && s == nodeTable->begin()->second){

        s->setLabel(NodeLabel::visited);
    }

    for(int i =0; i < s-> getIncidentEdges().size(); i++)
    {

        if(incidentEdges[i]-> getLabel() == (EdgeLabel:: unexplored))
        {

            Node* e = incidentEdges[i] -> opposite(s);
            if(e->getLabel() == NodeLabel::unexplored)
            {
                incidentEdges[i] -> setLabel(EdgeLabel::discovery);
                e->setLabel(NodeLabel::visited);


            }
            else{

                incidentEdges[i]->setLabel(EdgeLabel::cross);
            }
        }


    }


    }
}

0 个答案:

没有答案