【问题标题】:Visiting all nodes in a grid using pathfinding?使用寻路访问网格中的所有节点?
【发布时间】:2017-11-22 12:18:29
【问题描述】:

在我们的学期项目中,我们正在尝试制造一辆小型汽车,它可以在一个区域内搜索地下金属。每次在地面上遇到一个物体,它都必须为它标出坐标,并在它周围找到一条路径来访问所有剩余的节点。

我们已经实现了一种可以在网格中记录区域的方法,因此我们将所有区域都放在 x-y 坐标中。我们曾考虑使用修改版的寻路算法(广度优先、A* 或其他)在系统中寻找路径,但在实施时遇到了麻烦。

是否可以修改这些算法中的任何一个,而不是从节点 A 到 B,而是搜索每个坐标,如果遇到地面上的物体,则“重新路径”?

【问题讨论】:

  • 将所有单元格放入“未访问列表”中,开始时,当“未访问”列表不为空时,构造从当前单元格到列表中第一个单元格的路径。进入单元格后,检查它是否在“未访问”列表中,如果是则删除,然后在单元格中执行您的操作。这不是最有效的方法,但使用现有的寻路算法很容易实现,无需修改它。
  • @AndrewKashpur 我已经做到了,并实现了一个遍历列表中所有节点的函数。我的问题是,每个节点必须同时具有 x 坐标和 y 坐标,这样我就可以向汽车发送信息,使其在遇到“拐角”时转弯等。我无法理解如何实现这一点,但是您是否有任何指示?
  • 如果您向我们展示您的代码,我们将能够为您提供一些指导@Emil

标签: c++ breadth-first-search path-finding


【解决方案1】:

逻辑

首先,我们检查所有方块是否含有金属。然后我们将带有金属的正方形存储在布尔网格中。

伪代码

bool grid[10000][10000];
for (int i = 0; i < width; i++){
    for(int j = 0; j < height; j++){
       if (square is metal){
           grid[i][j] = true; //means its visited.
       }
    }
}
//Conduct bfs here
typedef pair<int , int> pi; //introduce priority queues
typedef pair<pi, int> ppi;
int dx[8] = {-1,-2, 1 ,2 ,-1, -2, 1, 2};//introduce movement coordinates
int dy[8] = {-2,-1, -2,-1, 2, 1, 2, 1};
//Check if the coordinates of the grid is true(visited) or false(unvisited)

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多