尝试实施广度优先搜索。
我正在测试的图表是以下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;
}
答案 0 :(得分:1)
您正在结构中使用包含每个子节点副本的列表。你需要使用指针。尝试使用当前节点指针跳过每个子节点:
Node* currNode;
std::list<node*> neighbors;