有向图中的前后边

back and forward edges in directed graph

本文关键字:有向图      更新时间:2023-10-16

我是新来的图论。我正在写一个代码来找到所有的前向和后向图边。我搜索并实现了如下代码。我的代码进入了无限循环。请您看一下。我们将非常感谢您。

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. 无论孩子的颜色如何,都调用dfsVisit。您将其缩进到更深的层次,但是没有在白色if周围添加任何括号——基于此伪代码,只有cout受到if语句的影响。但是,由于这只是一个伪代码,您应该将您编写的原始c++代码张贴出来,以便清楚。

  2. 您的条件中有三种颜色(灰色,黑色和白色),但您从未在任何地方设置白色。在调用dfsVisit之前,你的边初始化为白色?(你应该考虑使用enum或enum类来表示颜色,这样更干净,而且你不太可能因为拼写错误而导致错误)