古!老!的!敌!人!(指WA
原题链接:8036.走迷宫2024-08-25 21:37:03
发布于:广东
#include<bits/stdc++.h>
using namespace std;
constexpr int dirs[][2] {0,1,1,0,0,-1,-1,0};
int n , m , sum = 0;
vector<string> mat;
int dfs(int x , int y){
if(x == n-1 and y == m-1){
return 0;
}
mat[x][y] = '#';
int step = 114514;
for(auto &[dx,dy] : dirs){
int nx = x + dx , ny = y + dy;
if(nx < 0 or nx >= n or ny < 0 or ny >= m)continue;
if(mat[nx][ny] == '#')continue;
step = min(step , dfs(nx,ny) + 1);
}
return step;
}
int main(){
cin >> n >> m;
mat = vector<string>(n);
for(auto &s : mat) cin >> s;
int res = dfs(0,0);
cout << res+1;
}
全部评论 5
古老的朋友:他人代码
2024-08-27 来自 广东
1#include<bits/stdc++.h> using namespace std; struct node{ int x,y,step; }; int n,m; int dir[][2] = {{0,1},{0,-1},{1,0},{-1,0}}; int vis[41][41]; char a[41][41]; queue <node> q; int main(){ cin >> n >> m; for(int i = 0;i <= n;i++){ scanf("%s",a[i]); } int step; q.push({0,0,0}); while(!q.empty()){ node t = q.front(); q.pop(); if(t.x == n - 1 && t.y == m - 1){ cout << t.step + 1; break; } for(int i = 0;i < 4;i++){ int tx = t.x + dir[i][0]; int ty = t.y + dir[i][1]; if(tx < 0 || tx > n - 1 || ty < 0 || ty > m - 1 || a[tx][ty] == '#' || vis[tx][ty]) continue; q.push({tx,ty,t.step + 1}); vis[tx][ty] = 1; } } return 0; }
送你个模版
2024-08-26 来自 广东
0你回溯时是不是也算了步数
2024-08-26 来自 广东
0vis呢?
2024-08-25 来自 湖南
0标记数组没用到
2024-08-25 来自 湖南
0老代码懒得删了
2024-08-25 来自 广东
0没MLE
3个WA2024-08-25 来自 广东
0
额
大佬看看呗2024-08-25 来自 广东
0
有帮助,赞一个