我正在寻找一个大概的想法(也许一些代码示例或至少是伪代码) 现在,这是从某人给我的问题,或者更确切地说给我看,不用为了解决这个问题,但我确实大部分的问题,无论如何,说我遇到的问题是这样的:一般的想法,也许在图上的例子
比方说,你有向加权图与以下节点:
AB5, BC4, CD8, DC8, DE6, AD5, CE2, EB3, AE7
和问题是: 从C到C有多少个不同的路由,距离小于x。 (比如说10,20,30,40) 不同旅行的答案是:CDC,CEBC,CEBCDC,CDCEBC,CDEBC,CEBCEBC,CEBCEBCEBC。
我遇到的主要问题是,当我做DFS或BFS时,我的实现首先选择节点并将其标记为已访问,因此我只能找到2个CDC和CEBC路径,然后我的算法退出。如果我没有将它标记为访问,那么在下一次迭代(或递归调用)时,它将选择相同的节点而不是下一个可用的路由,所以我必须始终将它们标记为已访问,但通过这样做我怎么能够CEBCEBCEBC,这在节点之间非常复杂。
我已经看过所有不同的算法书,我在家里,虽然每个算法都描述了如何做DFS,BFS和找到最短路径(所有好的stufF),但没有显示如何无限循环迭代并仅停止当达到某个图的权重或达到某个顶点次数时。
CDCDCDC(或类似的)不是一个有效的解决方案吗? – Mikeb 2009-09-17 20:44:18
当然,如果它没有超过预定的权重限制,那么在你的例子中,限制必须是72 – Tom 2009-09-17 20:50:37
澄清:这是否与代表节点的数据的可变性有关?你是否考虑过使用不可变表示的递归算法(比如你可以使用函数式编程)? – Joe 2009-09-17 20:56:35