gpt4 book ai didi

c++ - 将项目添加到列表和迭代器问题

转载 作者:行者123 更新时间:2023-11-28 06:09:28 24 4
gpt4 key购买 nike

正在尝试实现广度优先搜索。

我正在测试的图是以下 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;

最佳答案

您在结构中使用了一个列表,其中包含每个子节点的拷贝。你需要使用指针。尝试使用当前节点指针跳过每个子节点:

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

关于c++ - 将项目添加到列表和迭代器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31577719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com