1 条题解
-
1
由于这道题没有题解,所以我是第一个发表的。 这道题我用广搜
#include <iostream> #include <cstring> #include <queue> using namespace std; int n,m, ans; char g[105][105]; int dis[105][105]; //用dis来存储答案 struct Point { int x, y; }; queue<Point> q; int dx[4] = {1, 0, 0, -1}; //方向数组,没啥好说的,就是确定方向 int dy[4] = {0, 1, -1, 0}; void bfs(int startX, int startY) { memset(dis, -1, sizeof(dis)); dis[startX][startY] = 0; q.push((Point){startX, startY}); while (q.size() > 0) { Point now = q.front(); q.pop(); if (now.x == n && now.y == m) { ans = dis[n][m]; return; } for (int i = 0;i < 4;i++) { int nx = now.x + dx[i]; int ny = now.y + dy[i]; if (dis[nx][ny] == -1 && g[nx][ny] == '.') { q.push((Point){nx,ny}); dis[nx][ny] = dis[now.x][now.y]+1; } } } } int main() { cin >> n >> m; memset(g, '#', sizeof(g)); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> g[i][j]; ans = -1; bfs(1, 1); cout << ans+1 << endl; //由于要带上起点和终点,所以加1 return 0; }
- 1
信息
- ID
- 1918
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 81
- 已通过
- 49
- 上传者