Algorithm 在直接加权图中找到从节点A到节点B的所有简单路径,且权重之和小于某个值?
我有一个有向加权图G=(V,E),可能有循环 我试图确定完成任务的最佳时间效率算法:t查找源节点和目标节点之间的所有简单路径,该路径中的边总权重小于某个值(为方便起见,我们将该值表示为路径权重限制) 所有配重均为正,可以浮动 因此,我的功能原型将是:Algorithm 在直接加权图中找到从节点A到节点B的所有简单路径,且权重之和小于某个值?,algorithm,graph,graph-algorithm,graph-theory,path-finding,Algorithm,Graph,Graph Algorithm,Graph Theory,Path Finding,我有一个有向加权图G=(V,E),可能有循环 我试图确定完成任务的最佳时间效率算法:t查找源节点和目标节点之间的所有简单路径,该路径中的边总权重小于某个值(为方便起见,我们将该值表示为路径权重限制) 所有配重均为正,可以浮动 因此,我的功能原型将是: def find_paths(G, source, target, path_weight_limit) 结果路径可能重叠,这很好 与此处讨论的内容非常相似,例如: 加权有向循环图中A到B不同路径数的求法 在受限图中寻找所有简单路径(NP问题)
def find_paths(G, source, target, path_weight_limit)
结果路径可能重叠,这很好
与此处讨论的内容非常相似,例如:
理论上,每个节点的权重为1+,因此循环不会成为问题,因为权重随着路径的增长而增加。但是如果您的任何节点都有成本/权重,我认为简单的DFS或BFS就可以了。Dijkstra's或A*中的启发式方法没有多大帮助,因为不管怎样,您希望找到所有符合条件的路径。只需确保(a)如果当前路径包含循环或太长,则中止该路径;(b)在列表中收集路径,而不是仅返回第一条路径。@tobias_k“太长”是指当前总权重>路径权重限制吗?对于n顶点有向图,在最坏的情况下,这可以返回所有可能的n个顶点的序列作为路径:考虑由n个顶点组成的输入,每个顶点在两个顶点之间具有两个方向的权重,并且权重限制是N.AMIT帕特尔的A*教程。amazing@Andrei我找到的最好的之一。自从我上一次温塔以来,他对它做了一点改进。只要启发式是一致的并且没有高估,他就可以找到与Dijkstra算法相同的完美路径。主要区别在于Dijkstra的算法不是针对目标的,因此它平均地探索所有方向,而a*探索更接近目标的节点多于远离目标的方向。你可以把A想象成迪杰斯特拉的。
Current node -> List of candidate nodes --(are they less?)-> List of next nodes
merge(list of search nodes, list of next nodes)
Node
- Node previous
- depth, cost
- misc data (coordinates, hp, gold, terrain, entity)