给定:完全有向加权图。所有重量均为正值。是否有任何简单的方法(启发式?)来找到访问所有顶点的最短(在权重方面)路径?顶点数约为25。 这个问题似乎与非对称旅行推销员很接近,但我并不要求这条道路成为循环。
答案 0 :(得分:2)
我会推荐K-shortest path方法:
http://www.mathworks.com/matlabcentral/fileexchange/32513-k-shortest-path-yen-s-algorithm
我认为这是你最好的选择......这是一个例子:假设你有8个节点,需要尽可能以最短的路径从节点1到节点8。假设所有节点彼此连接(即,节点1连接到节点2:8,依此类推)。您必须根据您的问题生成“成本矩阵”。
costMatrix = rand(8);
[shortestPath, cost] = dijkstra(costMatrix,1,8);
% Alternatively, return the 10 shortest paths from point 1 to 8:
[shortestPaths, costs] = kShortestPath(costMatrix,1,8,10);
成本矩阵中的位置(i,j)是从节点i到节点j的成本。如果costMatrix(i,j) = inf;
节点i和节点j之间没有连接。
在研究隐藏的马尔可夫模型之后,我发现了许多潜在的问题 - 排放矩阵很难定义,并且您可能会遇到在单个“路径”中进入“状态”两次或更多次的问题。 “使用k最短路径时,不会发生此错误。