找到连接矩形中一种颜色的两个点的任何方式

时间:2014-01-23 08:39:48

标签: algorithm graph-algorithm

这是一个矩形MxN(以像素为单位)。该矩形的任何像素都是黑色或白色。

总有一种方法可以通过黑色像素连接任何黑色像素A和任何像素B.使用另一种方法,有一种通过黑色像素的方法,可以将你从任何黑色像素带到任何其他黑色像素

上面的陈述对于白色像素并不完全正确。

问题是: 建立连接(Xstart,Ystart)和(Xfinish,Yfinish)的任何方式。

P.S。你有矩阵MxN值为1或0(白色或黑色)。 你有一个黑点(Xstart,Ystart)和黑色(Xfinish,Yfinish)。

任何语言(javascript,C#或其他什么都可以)。我需要这个主意。任何方式都可以。如果它变得更加复杂,那么最短路径的算法就不那么重要了。

仅有4种方式:南方,北方,东方和西方。 NW,SW,NE,SE(对角线)不行。

enter image description here

1 个答案:

答案 0 :(得分:1)

要查找任何路径,您只需进行breadth-first遍历即可。但是我们可以通过控制我们搜索的方向来做得更好。

A*是一种能够做到这一点的算法,它是针对此类问题的常见路径查找算法。您为周围的所有像素分配成本,并尝试成本最低的成本,直到找到路径为止。

成本函数是估算路径到目标的时间长度。你当然不能在合理的时间内知道确切的长度(因为那已经是你要解决的问题!)所以它必须是一个估计。 您可以使用任何成本函数,但通过更好的估计可以获得更好的结果。一个简单的问题是Manhattan distance

abs(X - Xfinish) + abs(Y - Yfinish)

已经证明,如果您的成本函数从不高估距离,A *将给出最佳答案(最短路径);如果是,则成本函数称为admissible。因此,要找到最佳路径,最好低估而不是高估距离。不幸的是,太多的低估会让你的运行时性能更差,因为你需要在找到路径之前尝试更多的像素/节点。一个可以接受的成本函数是毕达哥拉斯定理给出的常规Euclidean distance

sqrt((X - Xfinish)^2 + (Y - Yfinish)^2)