假设您有一张任意黑白图像,请考虑以下图像:
........... ...........
........... ...........
........... ...........
.OOO...O... ...........
X...O.O.OOY XOOO...OOOY
.....O..... ...........
........... ...........
........... ...........
........... ...........
"."
代表黑色像素,"O"
,"X"
,"Y"
代表白色像素
左图片的X
和Y
像素在O
的路径之间相互关联(就Moore's neighbourhood而言) 。在右侧图片上X
和Y
像素已断开连接。通过具有任意黑白图像,我需要高性能算法,该算法将回答一组像素是否连接到另一组像素的问题。我非常肯定必须有一个完善的解决方案来解决这个问题,因为这个问题看起来很常见,但我似乎无法找到一个适合我的方案。顺便说一句,我知道Flood Fill算法,但目前我还没有考虑它,因为它比回答最初问题所需的工作更多。
我希望参考主题方向的任何信息,
万一你得到原始问题的答案,也许你可能会回答以下问题:
...........
...........
...........
.OOO...O...
X...O.O.OOY
.....O.....
..........Z
..........U
..........V
这也很好(但不是必须的)可以用以下形式回答最初的问题:
像素X
已连接到像素Y
,
像素X
未连接到像素Z
,
像素X
未连接到像素U
,
像素X
未连接到像素V
,
提前谢谢!
答案 0 :(得分:1)
你是对的,这个问题很常见,并且有一个众所周知的高性能算法,它在时间上与输入的大小成比例:O(n)
(因为每个顶点最多有8个边)。您所需要的只是通过图像来创建图形,其中每个像素是顶点,边缘是2个顶点是邻居。
然后使用图表,只需在图表上运行DFS / BFS,从X
顶点开始,如果到达Y
,则停止,或者在你的边疆没什么。
请注意,在这里您还可以利用启发式方法甚至使用A* algorithm(您的启发式方法为manhattan distance)。