将项添加到列表和迭代器问题

时间:2015-07-23 03:33:29

标签: c++ iterator breadth-first-search

尝试实施广度优先搜索。

我正在测试的图表是以下4< -2< -1-> 3(意思是1是根,1连接到2,2连接到4. 3只连接到1)。

我不明白为什么当iter_queue指向2时,会跳过后面的整个循环。

任何提示?谢谢。

 #include <iostream>
 #include <list>


enum state{white=1, grey, black};

struct node
{
    int index;
    int state = white;
    std::list<node> neighbors;
};


bool search(node n1, node n2) 
{
    using namespace std;
    std::list<node> queue;
    queue.push_back(n1);

    auto iter_queue = queue.begin();

    while(iter_queue!=queue.end())
    {

        auto iter1=iter_queue->neighbors.begin();


        while(iter1!=iter_queue->neighbors.end())
        {

            if(iter1->index == n2.index)
            {
                return true;
            } else if(iter1->state!=black)
            {
                if(iter1->state==white){
                    iter1->state=grey;

                    queue.push_back(*iter1);
                }
            }
            ++iter1;
        }
        iter_queue->state = black;
        queue.pop_front();
        iter_queue=queue.begin();
    }
return false;

}

1 个答案:

答案 0 :(得分:1)

您正在结构中使用包含每个子节点副本的列表。你需要使用指针。尝试使用当前节点指针跳过每个子节点:

Node* currNode; std::list<node*> neighbors;