対応するadjMat[i、j] = 1に1を含めることにより、ノード間のエッジを追跡するグラフの隣接行列があります。この隣接行列を通して、グラフに存在する長さ4のすべての閉じたパスを見つけたいと思います。誰かが私に擬似コードを提供してくれませんか。ありがとう
2665 次
3 に答える
2
これは宿題のように聞こえるので、全部をあげることはしません。しかし、ここにヒントがあります。長さ4のサイクルを見つけることに関心があるので、隣接行列の4乗を取り、対角線に沿ってスキャンします。エントリM[i、i]がゼロ以外の場合、頂点iを含むサイクルがあります。
于 2009-03-14T19:57:48.807 に答える
1
おそらく、それを計算する最適な方法ではありませんが (それは ですO(n^4)
)、非常に簡単な方法は、すべての頂点をスキャンすることです。
a, b, c, d such that b > a, c > b, d > c
次の各サイクルをチェックしてからチェックできます。
1. ([a,b] && [b,c] && [c,d] && [d,a]) 2. ([a,b] && [b,d] && [d,c] && [c,a]) 3. ([a,d] && [d,b] && [b,c] && [c,a]) 1: 2: 3: A---B A---BAB | | | | \ / |\ /| | | | | X | X | | | | | / \ |/ \| D---C D---CCD
基本的に、頂点の順序付けられたすべてのセット (a、b、c、d) をチェックして、サイクルを形成できる 3 つの方法を確認します。
したがって、擬似コードは次のようになります。
for a = 0 to <lastVertex>
for b = a + 1 to <lastVertex>
for c = b + 1 to <lastVertex>
for d = c + 1 to <lastVertex>
if(IsCycle(a,b,c,d)) AddToList([a,b,c,d])
if(IsCycle(a,b,d,c)) AddToList([a,b,d,c])
if(IsCycle(a,c,b,d)) AddToList([a,c,b,d])
next d
next c
next b
next a
于 2009-03-14T20:15:18.810 に答える
0
DFSが開始ノードを検出するすべてのノードとレコードノードに深さ制限深さ優先探索を適用します。検索については、ここの擬似コードを参照してください:http: //en.wikipedia.org/wiki/Depth-limited_search。次のようなものを追加する必要があります
if(node' == node && node'.depth==4) memorize(node)
ループの先頭まで。
于 2009-03-14T19:56:15.067 に答える