無向グラフのすべてのパスをリストしようとしていますが、私の質問はこの質問に似ています。このコードを実行しようとしましたが、無期限にループします。60 ノードで実行しました。正しいソリューションを作成する方法についてのアイデアはありますか?
このようなランダム グラフを追加したところ、コードは次のようになりました。
#include<stdio.h>
static struct {
int value1;
int value2;
int used;
} data[] = {
{ 1, 2 },
{ 1, 5 },
{ 2, 3 },
{ 2, 6 },
{ 3, 7 },
{ 4, 0 },
{ 0, 4 },
{ 7, 3 },
{ 2, 1 },
};
enum { DATA_SIZE = sizeof data / sizeof *data };
static int output[DATA_SIZE];
int traverse(int from, int to, int depth) {
output[depth++] = from;
int i;
if (from == to) {
for (i = 0; i < depth; i++) {
if (i) {
printf("-");
}
printf("%d", output[i]);
}
printf("\n");
} else {
for (i = 0; i < DATA_SIZE; i++) {
if (!data[i].used) {
data[i].used = 1;
if (from == data[i].value1) {
traverse(data[i].value2, to, depth);
} else if (from == data[i].value2) {
traverse(data[i].value1, to, depth);
}
data[i].used = 0;
}
}
}
}
int main() {
traverse(1, 7, 0);
}`
出力は次のとおりです。 1-2-3-7 1-2-3-7 1-2-3-7 1-2-3-7
なぜそのパスを4回取得するのですか? 修正することは可能ですか?ありがとう