次のように視覚的に表された、6つの頂点を持つ無向グラフを作成しました:http://i.imgur.com/EtQyspG.png
同じノードに再度アクセスすることなく、開始点からすべてのパスを見つけることができ、終了点が指定されていないスクリプトを作成したいと思います。
私が見たBFS、DFS、A *アルゴリズムのすべての例には、最終宛先ノードが必要です。ただし、より大きなグラフでは、ポイントAからポイントZまでのすべての可能な経路を見つけるのはNP困難かもしれません。このため、設定された移動回数内で達成可能なすべての目的地へのすべての経路を見つけたいと思います(このグラフ上)たとえば、-3つの移動==パス内の最大4つの頂点)
PHP配列を使用してグラフをコーディングしました。各キーは頂点であり、その配列には隣接するポイントが含まれています。
<?php
$graph[1] = array(2,6);
$graph[2] = array(1,4);
$graph[3] = array(4,5);
$graph[4] = array(2,3,6);
$graph[5] = array(6,3);
$graph[6] = array(1,5,4);
ただし、この方法でパス検索を実行するアルゴリズムはわかりません。私の希望する出力は次のようになります。
Path 1: 1,2
Path 2: 1,2,4
Path 3: 1,2,4,3
Path 4: 1,6
Path 5: 1,6,4,3
Path 6: 1,6,5
Path 7: 1,6,5,3
必要なコードを書くのに問題はありませんが、アルゴリズム/関数に必要な手順(ツリートラバーサル再帰を想定していますか?)を理解するのは困難です。
質問:これを行うにはどのようなアプローチ/アルゴリズムを使用する必要がありますか?グラフ入力配列が与えられた場合にどのように機能するかを示す例(または少なくとも擬似コード)はありますか?