【发布时间】:2013-01-09 23:25:52
【问题描述】:
所以我有以下问题:
给定一个 x x y 维度的网格,计算路线的数量 通过它从一个角落开始(比如说左上角)并结束于 另一个(右下)并通过每个顶点。
所以我目前的方法只是通过尝试所有可能的路径并计算到达终点并遍历每个节点的路径来强制它。虽然它有效,但它是 O(n^2) 并且非常快地变得令人难以置信的慢。由于路径需要遍历每个顶点,我不确定如何组合。
我查找了更复杂的算法,Hierholzer 计算欧拉路径的算法似乎有些相关但并不完美,因为为此不能多次遍历节点。
事实上,我的程序可以运行,但效果很差,我想让它更有效率。我可以使用更好的算法吗?
编辑感谢到目前为止的回答。澄清一下,二维网格中的所有节点都通过 n/e/s/w 连接
此外,网格不必是正方形
【问题讨论】:
-
这不是旅行商问题吗?如果是这样,回答的人不仅能得到几分,还能获得诺贝尔奖!
-
如果它“非常快地变得难以置信地慢”,那么它不是
O(n^2) -
@Jan Dvorak 是的,我认为暴力破解是次要的
-
@ccleve 这不是 TSP。 TSP 是指您最小化行驶的总距离,而不是简单地计算路径的数量。
-
修改后,这只是一个有最终答案的数学问题,不需要使用遍历/等。只需在表达式中插入 x 的值即可计算