の実装、私はグラフは、反復深化深さ優先探索に
function IDDFS(root)
for depth from 0 to ∞
found ← DLS(root, depth)
if found ≠ null
return found
function DLS(node, depth)
if depth = 0 and node is a goal
return node
if depth > 0
foreach child of node
found ← DLS(child, depth−1)
if found ≠ null
return found
return null
のための反復深化深さ優先探索を実装するためにウィキペディアpageから次の擬似コードを使用しています。ここに私のコードです:
bool DLS(GrapheMat* graphe, Node* source, NomSom but, int limit) {
bool found = false;
printf("%s\n", (char*)source->etat);
if (strcmp((char*)source->etat, (char*)but) == 0) {
return true;
}
if (limit > 0) {
List* listSon = nodeSon(graphe, source);
while(!listEpmty(listSon)) {
Node* son = (Node*)popList(listSon);
if (DLS(graphe, son, but, limit-1)) {
return true;
}
}
}
return false;
}
bool IDDLS (GrapheMat* graphe, NomSom goal, int limit) {
bool found = false;
node* source = createNode(graphe, graphe->nomS[0]);
for (int i = 0; i <= limit; i++) {
printf("/nLimit : %d\n", i);
DLS(graphe, source, goal, i);
}
return false;
}
私は次のグラフを使用してテストしています:
は、次のファイルから構築されています:すべてのです
/nLimit : 0
A
:
A B C D E F G H I J ;
A : B (140) C (118) D (75) ;
B : A (140) E (99) F (151) G (80);
C : A (118) ;
D : A (75) F (71) ;
E : B (99) H (211) ;
F : D (71) B (151) ;
G : B (80) I (146) J (97) ;
H : E (211) J (101) ;
I : G (146) J (138) ;
J : G (97) H (101) I (138) ;
IDDLS(graphe, "J", 4)
を呼び出すと、次のように出力します。 DLS(graphe, "A", "J", 4)
を呼び出す
は、以下の(改行削除)を出力:
ABABAEFGCADAFEBAEFGHEJ
私が理解から、DLS機能は、実際には次のパスに従ってください:
ABEGHCDEFGHIJ
@ikegami私はちょうど出力のポストを編集し、子どもたちは、私は再びポストを編集したアルファベット順 – Meryem
@ikegami申し訳ありません順序付けられ、それは十分な情報 – Meryem
再「*私の出力がある願っています: /nLimit:0 A これはすべて* "です。プロセスがシグナルによって殺されない限り不可能です。それは何が起こったのですか?もしそうなら、どんな信号? – ikegami