【发布时间】:2016-08-01 17:30:28
【问题描述】:
我正在尝试在我的代码中实现最短路径算法,但我不知道如何去做。假设您有一个包含多个线段的 (x,y) 坐标的矩阵。假设每个线段都有一个与之相关的分数,分数表明该线段对设计的“价值”程度。
如果将此信息放入矩阵中,则行的格式可以如下:
开始 X,开始 Y,结束 X,结束 Y,得分
现在,假设上述矩阵中没有提供连接信息,即您不知道基于矩阵的 1 条线与另一条线的关系。基于上面的矩阵,我想找到产生最高分数的元素路径(在我的程序中它是最低分数,但这是语义)。然而,问题是每条路径必须是连续的,连接线段之间没有跳跃。有谁知道如何编码?我在下面有一段代码,其中计算并存储了每个元素的分数(在矩阵 ElementMap 中),但是一旦有了 ElementMap,我不知道如何形成最佳路径。
谢谢
for i = 1:Count2
for j = 1:length(ElementMap)
xStart = ElementMap(j,1);
yStart = ElementMap(j,2);
xEnd = ElementMap(j,3);
yEnd = ElementMap(j,4);
Score = 0;
if NodeMap(2*(i-1)+1) == ElementMap(j,1) && ElementMap(j,5) ~= 1
for m = 1:length(ThetaIncident)
[Point] = RayScore(xStart,yStart,xEnd,yEnd,ThetaIncident(m),OvenGlassXrange);
Score = Score - Point;
end
ElementMap(j,5) = 1; % 1 will indicate Element has been analyzed
end
ElementMap(j,6) = ElementMap(j,6) + Score;
end
end
【问题讨论】:
-
我将分两步解决它:1. 从端点创建一个图(即,每个唯一端点都是一个顶点,每个段都是连接两个顶点的加权边),2. 运行合适的图算法
-
我了解最短路径算法的概念,但我遇到问题的部分是在我的代码上下文中实现一个。
-
您似乎跳过了@VincentvanderWeele 建议中的第 1 步。大概你有一些独特的坐标
(x,y)。每个唯一坐标都是一个顶点。数据的每一行都是一条边。这有意义吗? -
这确实有道理,但我有一些问题。本质上,制作图需要几条路径,这些路径被定义为边的集合。使用我的数据,只有某些边缘会在几何上相互连接(形成连续函数),我不知道如何判断哪种边缘组合将形成一条可行的路径。如何形成路径?
标签: algorithm matlab shortest-path