FindCycle
予備知識
- FindCycleは,グラフ内の1つ以上の他と異なる閉路を見付けようと試みる.閉路は,辺リストのリストとして,あるいは見付からない場合には{}として返される.グラフの閉路(閉路が特定の端点を持つ明示的な経路を使って識別される場合には,より正しくは回路と呼ばれる)は,最初と最後の辺が端点で繋がる,互いに区別の付く辺の連続する列である.閉路の列挙は,数多くの状況(地下鉄,道路マップ等)での巡回経路を計画したり,電気回路の電圧や電流を計算したり,コンピュータプログラムにおける無限ループを発見したりするのに使える.
- 一般に,FindCycle[g,kspec,s]は,長さ kspec の s 個の閉路を求めようと試みる.回数指定 s は,省略する(その場合には1であるとみなされる)場合も,正の整数の場合も,あるいはAllになる場合もある.長さの指定 kspec は,正の整数 k(その場合には,長さが k 以下の閉路を表す),Infinity,リスト{k}内の正の整数(その場合は長さが厳密に k である閉路を表す),2つの正の整数のリスト{kmin,kmax}(その場合は,長さが kmin から kmax までの閉路を表す)のいずれかである.
- FindCycle[g,{3}]が{}を返すグラフは,三角形を持たないグラフであり,FindCycle[g,{4}]が{}を返すグラフは,正方形を持たないグラフである.長さ n の閉路(n はグラフの頂点数)はハミルトン(Hamiltonian)閉路であり,そのような閉路を持つグラフはハミルトングラフである.
- 閉路を持たないグラフは,非巡回グラフと呼ばれ,AcyclicGraphQを使って調べることができる.
- FindCycleは単純な閉路を返し,FindHamiltonianCycle,FindEulerianCycle,FindFundamentalCyclesは特定のタイプの閉路を返す.FindPathは,2つの特定の頂点間の経路(端点が一緒ではない辺の集合)を求めるのに使われ,結果は経路に沿った連続する頂点の集合として返される.
例題
すべて開く すべて閉じる例 (2)
スコープ (12)
指定 (6)
FindCycleは,無向グラフに使うことができる:
FindCycle[[image]]FindCycle[[image]]FindCycle[[image]]FindCycle[[image]]FindCycle[{2 -> 1, 1 -> 4, 3 -> 2, 2 -> 5, 6 -> 3, 5 -> 4, 4 -> 7, 6 -> 5, 8 -> 5, 6 -> 9, 7 -> 8, 7 -> 10, 9 -> 8, 11 -> 8, 12 -> 9, 10 -> 11, 12 -> 11}]FindCycleは,大きいグラフに使うことができる:
g = GridGraph[{10, 10, 10, 10}];FindCycle[g]//Short//Timing一覧 (6)
FindCycle[[image], {8}]FindCycle[[image], 6]FindCycle[[image], {3, 5}]FindCycle[{[image], 8}]FindCycle[[image], Infinity, All]//ShortFindCycleは,閉路がない場合は空リストを返す:
FindCycle[[image]]アプリケーション (4)
各頂点を厳密に1回訪れるハミルトン(Hamiltonian)閉路を求める:
g = PolyhedronData["Dodecahedron", "Skeleton"]FindCycle[g, {VertexCount[g]}]HighlightGraph[g, First[%]]g = PolyhedronData["Dodecahedron", "Skeleton"]FindCycle[{g, 1}]cycles = FindCycle[g, Infinity, All];Select[cycles, MemberQ[#, 52 | 25]&]//Shortbusan = [image];allloops = FindCycle[busan, Infinity, All];Max[Length /@ allloops]Short[loop = Select[allloops, (Length[#] == %)&]]HighlightGraph[busan, loop]g = [image];指定された出発点のノードについて,長さが最低でも20で,危険な犬がいる通りを避けた,5通りの散歩コースを求める:
walks = FindCycle[{EdgeDelete[g, {1216, 23, 1318, 2127}], "Home"}, {20, Infinity}, 5]HighlightGraph[g, walks[[1]]]特性と関係 (3)
FindHamiltonianCycleを使って各頂点を厳密に1回訪れる閉路を求める:
g = [image];FindHamiltonianCycle[g]FindCycle[g, {VertexCount[g]}]EdgeCycleMatrixはすべての閉路の基底を与える:
g = WheelGraph[4]basis = Pick[EdgeList[g], #, 1] & /@ EdgeCycleMatrix[g]addedges[edges_] := Cases[Tally[Flatten[edges]], {e_, _ ? OddQ} :> e]cycles = addedges[Pick[basis, #, 1]]& /@ Most[Tuples[{1, 0}, 3]]FindCycleからすべての閉路を求める:
FindCycle[g, Infinity, All]FindCycleは,非巡回グラフについては空リストを与える:
g = GraphData[{"CayleyTree", {3, 4}}]AcyclicGraphQ[g]FindCycle[g]考えられる問題 (1)
テキスト
Wolfram Research (2014), FindCycle, Wolfram言語関数, https://reference.wolfram.com/language/ref/FindCycle.html (2015年に更新).
CMS
Wolfram Language. 2014. "FindCycle." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2015. https://reference.wolfram.com/language/ref/FindCycle.html.
APA
Wolfram Language. (2014). FindCycle. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/FindCycle.html
BibTeX
@misc{reference.wolfram_2026_findcycle, author="Wolfram Research", title="{FindCycle}", year="2015", howpublished="\url{https://reference.wolfram.com/language/ref/FindCycle.html}", note=[Accessed: 01-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_findcycle, organization={Wolfram Research}, title={FindCycle}, year={2015}, url={https://reference.wolfram.com/language/ref/FindCycle.html}, note=[Accessed: 01-November-2026]}