有向图中的后沿和前沿

时间:2015-09-21 06:35:30

标签: c++

我是图论的新手。我正在编写一个代码来查找有向图中的所有前后边。我搜索并实现了如下代码。 我的代码进入无限循环。 你能看一下吗?我们会非常恭喜你。

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++;
    }

1 个答案:

答案 0 :(得分:0)

我发现您的代码可能存在两个问题:

  1. 您为每个孩子打电话dfsVisit,无论其颜色如何。您将其缩进到更深层次,但是如果 - 基于此伪代码,只有cout受if语句影响,则不会在白色周围添加任何括号。 但由于这只是一个伪代码,你应该发布你写的原始C ++代码。

  2. 你的条件有三种颜色(灰色,黑色和白色),但你从不在任何地方设置白色。在致电dfsVisit之前,您的边缘已初始化为白色? (你应该考虑使用enum或enum类来表示颜色,它是清晰的,你不太可能导致错误的错误)