2012-05-05 5 views
-2

私は直接グラフで回路を探したいが、この回路は特定の頂点から始まり、そこで終わる。私はこのグラフを作成するために隣接リストのデータ構造を使用しますが、アルゴリズムがどのようになるか分からず、助けてください。 ありがとうございました直接グラフ内の回路を見つける

+1

あなたがしようとしました([それをグーグル] http://www.google.com/#hl=en&output=search&sclient=psy-ab&q=detect+cycles+in+directed+graph&oq=検出+サイクル+ in + dir&aq = 0&aqi = g1g-q2&aql =&gs_l = hp.3.0.0j0i22l2.5304.10257.0.11144.20.12.0.8.8.0.208.1915.0j11j1.12.0 ... 0.0.-eh4kSQJRfQ&pbx = 1&bav = on.2 、or.r_gc.r_pw.r_qf。、cf.osb&fp = d0f8cd49a0fc8cd2&biw = 1138&bih = 555)? –

+1

plesaeあなたの試行を投稿してください... –

+0

Tarjanのアルゴリズムを使用できます。 http://stackoverflow.com/questions/261573/best-algorithm-for-detecting-cycles-in-a-directed-graph – spinlok

答えて

1

このヒントが役立つかもしれませ:

  1. トラバースグラフ(任意のアルゴ - BFS DFS)あなたは を訪問し、その親
  2. チェックを保管してきました
  3. カラーノードあなたが通過しているノードがすでに になっている場合は、同じ ノードになるまで親にループバックします。
+0

ありがとうありがとう –

0
void DFS (Node* ptr , int node , int index , int n) 

{int型I。

if (ptr == NULL) 
{ 
    ptr=arrNode[index].next; 
    node = ptr->vertex; 
} 

for (int i=0 ; i < n ; i++) 
{ 
    if ((node == arrNode[i].vertex) && (ptr->visit=false)) 
    { 
     ptr=arrNode[i].next; 
     ptr->visit = true; 
     s.push(arrNode[i].vertex); 
    } 
    ptr=ptr->next; 
    DFS(ptr,ptr->vertex,i+1 , n); 

} 

}

+0

私はこのコードを書いた、私はそれを得ることができない何かが間違っています。 私のデータ構造体は長さ=頂点番号の配列です。この配列の各フィールドには、すべての近傍を含むリンクリストへのポインタがあります:( –

+0

これは読者があなたの現在の作品を見ることができるようにあなたがそうしたら、もっと肯定的な反応を得るでしょう - 運が良ければ ':)' – halfer