簡體   English   中英

有向圖中的前后邊緣

[英]back and forward edges in directed graph

我是圖論的新手。 我正在編寫代碼以查找有向圖中的所有前向和后向邊緣。 我搜索並實現了以下代碼。 我的代碼進入了無限循環。 你能看看嗎。 我們將非常感謝您。

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為每個孩子調用dfsVisit ,無論其顏色如何。 您將其縮進了更深的層次,但是您沒有在白色if周圍加上任何括號-基於此偽代碼,if語句僅影響cout 但是,由於這只是一個偽代碼,因此應該清楚地寫出編寫的原始C ++代碼。

  2. 您可以在自己的條件下使用三種顏色(灰色,黑色和白色),但是您永遠不會在任何地方設置白色。 在調用dfsVisit之前,邊緣已初始化為白色。 (您應該考慮將enum或enum類用於顏色,它是無污染的,並且不太可能導致拼寫錯誤)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM