【发布时间】:2013-07-29 20:32:15
【问题描述】:
我试图在无向图中列出所有路径,我的问题类似于this question。我尝试运行this code,但它无限循环——我用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 次该路径?有可能修复吗?谢谢
【问题讨论】:
-
您是要查找图中所有节点之间的所有路径还是两个给定节点之间的所有可能路径?对于后面的内容,请查看python.org/doc/essays/graphs 中提供的简单 Python 实现,将其转换为 C++ 是微不足道的。
-
它是否适用于较小的图,比如 4 个节点?还是10个节点?根据图表的连接方式,您最多可以查看 1.1 个 quintillion 路径。如果你知道如何计算每秒 10 亿条路径,那将需要 877 年才能执行。有关您的问题约束的更多信息会很好。
-
提示:谷歌搜索“动态编程”
-
我正在尝试获取两个节点之间的所有路径。
-
你有两次边 (1,2) 和 (3,7),这使得 4 条路径看起来相同。
标签: c++