具有指定目标的星型搜索算法非常简单。但是,如果图表中有多个目标,该怎么办?例如;您可能希望找到必须包含先前指定节点的最短路径。这里的约束是说你的路径必须包括A,B和C节点(或更多),而不仅仅是找到节点A或B或C的路径。当然,该图包括一个或多个A,B,C类型节点。所以有一个问题我如何适应 A星搜索算法多个目标?
编辑:我们可以访问不止一个节点。
答案 0 :(得分:3)
您描述的是路径条件而非目标条件。像所有搜索算法一样,A *正在寻找目标的路径[可能在一组,目标,没有问题]。
您的问题[针对一般情况]至少与Traveling Salesman Problem一样困难,因此此问题为NP-Hard。
减少很简单:给定一个TSP实例 - 找到从某个v
到v
的最短路径,这样路径就会经过所有顶点[约束]。您只需使用不同的标记标记每个顶点即可。
但请注意,A*
算法在目标顶点集中找到到顶点的最短路径没有问题。请记住,A *基于Dijkstra's Algorithm,它从单个来源找到所有顶点的最短路径。
答案 1 :(得分:2)
您有一组z
的所有节点,目标节点G
,并设置a
个子目标节点y
。从S
开始节点开始,指向a
到y
中所有节点的路径。然后,从那些路径到a
到y
中的节点,但是如果路由已经通过c
节点,例如忽略该分支的所有c
个节点。剔除从最终目标移开的分支,直到您阅读最终目标状态并且具有贯穿所有已知子目标状态的路径。
希望这是有道理的。我很快就会得到一个图表,这可能有所帮助。
答案 2 :(得分:2)
嗯..计算从S-> A,S-> B,S-> C的最短路径,选择最短路径(比如说B),计算从B-> C和B-的最短路径; A,选择最短(比如C),将最短路径C计算为A.然后将路径一起添加。
[编辑] 好吧,不是那么简单。我认为您可以使用A *来评估Start,A,B,C之间所有排列的最短路径(其中包括S->目标集中的每个节点,A中的每个节点到B中的每个节点等)并选择最短的组合。