【问题标题】:How to find a shortest path in a graph that while travelling it, you can "see" all the nodes within a radius如何在图中找到一条最短路径,使它在行进时可以“看到”半径内的所有节点
【发布时间】:2022-12-01 02:25:00
【问题描述】:

我有一个二维网格,其中一些瓷砖是障碍物(墙),我希望能够找到最短路径,让您可以绕过网格,能够看到地图中半径为的所有其他网格看法。这是一个像素艺术示例(黑色是障碍物,灰色是任意路径)。

【问题讨论】:

  • “绕过网格”:什么意思?
  • “视野半径”请更清楚地说明这一点。假设没有障碍物 - 网格中的单个点是否能够“看到”任何地方(即无限视线)或只能“看到”一定距离内的点(即无障碍网格中的路径需要沿着光栅的路径由两倍“视野”分隔的线)
  • @ravenspoint 仅在一定距离内的点
  • 编辑你的问题。不要在 cmets 中隐藏重要的规范。

标签: algorithm math graph path traversal


【解决方案1】:
  • 将 R 设置为“视野半径”
  • 创建间隔为 2 * R 的正交点网格
  • 移除与障碍物碰撞的网格点
  • 添加从每个点到 9 个或更少的最近点的连接。不要跨越障碍物连接
  • 计算剩余点的最小生成树。

指定具有 20 x 20 网格、2 的视野半径和三组障碍物的“障碍跑道”

20 20 2
4 4
5 5
6 6
14 9
14 10
14 11
14 12
14 13
14 14
14 15
14 16
10 16
11 16
12 16
13 16
4 14
4 15
5 15

看起来像这样

邻接表(链接 id、节点 1 id、节点 2 id、距离)

l 42 47 5
l 42 142 5
l 47 52 5
l 47 152 7.07107
l 52 57 5
l 52 147 7.07107
l 52 152 5
l 52 157 7.07107
l 57 152 7.07107
l 57 157 5
l 142 242 5
l 142 247 7.07107
l 147 152 5
l 147 242 7.07107
l 147 247 5
l 147 252 7.07107
l 152 247 7.07107
l 152 252 5
l 157 257 5
l 242 247 5
l 242 342 5
l 247 252 5
l 247 347 5
l 257 357 5
l 342 347 5
l 347 352 5
l 352 357 5

将此图传递到您最喜欢的图论库中以获得最小生成树。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多