扫地机器人路径规划c++
时间: 2023-12-02 17:42:56 浏览: 38
以下是一个基于C++的扫地机器人路径规划的示例代码:
```c++
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int N = 110, M = N * N;
const int INF = 0x3f3f3f3f;
int n, m;
int g[N][N];
int dist[N][N];
bool st[N][N];
struct Node {
int x, y, d;
bool operator< (const Node& t) const {
return d > t.d; }
};
int dijkstra() {
memset(dist, 0x3f, sizeof dist);
dist[0][0] = 0;
priority_queue<Node> heap;
heap.push({0, 0, 0});
while (heap.size()) {
auto t = heap.top();
heap.pop();
int x = t.x, y = t.y;
if (st[x][y]) continue;
st[x][y] = true;
if (x == n - 1 && y == m - 1) return dist[x][y];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
for (int i = 0; i < 4; i++) {
int a = x + dx[i], b = y + dy[i];
if (a < 0 || a >= n || b < 0 || b >= m) continue;
int w = g[x][y] == i ? 0 : 1;
if (dist[a][b] > dist[x][y] + w) {
dist[a][b] = dist[x][y] + w;
heap.push({a, b, dist[a][b]});
}
}
}
return -1;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> g[i][j];
}
}
int res = dijkstra();
cout << res << endl;
return 0;
}
```
该示例代码使用了Dijkstra算法来进行路径规划,通过优先队列来维护当前最短路径。在每次更新距离时,需要判断当前位置是否已经被访问过,如果已经被访问过,则不需要再次更新距离。在计算距离时,需要根据当前位置和下一个位置的关系来判断是否需要增加权值。最终,当到达终点时,输出最短路径即可。