我是图论的新手。我正在编写一个代码来查找有向图中的所有前后边。我搜索并实现了如下代码。 我的代码进入无限循环。 你能看一下吗?我们会非常恭喜你。
void dfsVisit(u)
{
u->color="gray";
u->time=count;
count++;
for(every child node v of u)
{
if(v->color == "black")
{
if(u->time < v->time)
cout<<"Edge "<<u<<"->"<<v<<" is forward edge"<<endl;
else
cout<<"Edge "<<u<<"->"<<v<<" is cross edge"<<endl;
}
if(v->color == "gray")
cout<<"Edge "<<u<<"->"<<v<<" is back edge"<<endl;
if(v->color == "white")
cout<<"Edge "<<u<<"->"<<v<<" is tree edge"<<endl;
dfsVisit(v);
}
u->color="black";
u->time=count;
count++;
}
答案 0 :(得分:0)
我发现您的代码可能存在两个问题:
您为每个孩子打电话dfsVisit
,无论其颜色如何。您将其缩进到更深层次,但是如果 - 基于此伪代码,只有cout
受if语句影响,则不会在白色周围添加任何括号。
但由于这只是一个伪代码,你应该发布你写的原始C ++代码。
你的条件有三种颜色(灰色,黑色和白色),但你从不在任何地方设置白色。在致电dfsVisit
之前,您的边缘已初始化为白色? (你应该考虑使用enum或enum类来表示颜色,它是清晰的,你不太可能导致错误的错误)