Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Dijsktra图,最短路径_Algorithm_Graph_Language Agnostic_Dijkstra - Fatal编程技术网

Algorithm Dijsktra图,最短路径

Algorithm Dijsktra图,最短路径,algorithm,graph,language-agnostic,dijkstra,Algorithm,Graph,Language Agnostic,Dijkstra,我对图表有问题。我的图表如下所示: 真正的问题是:我想找到两点之间“转弯”次数最少的路径。下面是一个例子: 在这张图中,我画了一个简单的3x3图,红点和蓝点之间的最短路径是绿线,因为它只有一个转弯,而粉红线有三个转弯 我想对图的边进行相应的加权,然后使用Dijsktra算法找到合适的路径解决方案的关键在于权衡“转弯”操作的高成本。事实上,任何大于W+H的值都是可用的。 然而,我猜你是否需要修改你的问题?如果图形的所有单元格都可用,那么两个点之间的最短路径显然是唯一的,不需要调用Dijsktr

我对图表有问题。我的图表如下所示:

真正的问题是:我想找到两点之间“转弯”次数最少的路径。下面是一个例子:

在这张图中,我画了一个简单的3x3图,红点和蓝点之间的最短路径是绿线,因为它只有一个转弯,而粉红线有三个转弯


我想对图的边进行相应的加权,然后使用Dijsktra算法找到合适的路径

解决方案的关键在于权衡“转弯”操作的高成本。事实上,任何大于W+H的值都是可用的。
然而,我猜你是否需要修改你的问题?如果图形的所有单元格都可用,那么两个点之间的最短路径显然是唯一的,不需要调用Dijsktra之类的最短路径算法。如果他们在同一条线上,就直走,如果他们不在,只需要转一圈。因此,我建议您添加一些条件,例如,某些点无法到达,那么这个问题就变得有趣。

您有任何代码可以显示吗?如果您将水平高度的边称为1,将垂直边称为0.999,我认为您只需一次“转弯”即可获得路径。但这只是我的直觉,与vivoconunxino的想法类似,使用启发式h1(x,y)=ax+y和/或h2(x,y)=x+ay。其中使用基于边缘的算法并引入转弯成本函数,我找到了解决方案。简单边的代价为1,旋转边的代价为2*(H+W),其中H是图形的高度,W是宽度。谢谢大家;)