53分求助

P1825 [USACO11OPEN] Corn Maze S

```c #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc++.h> using namespace std; int n,m,sx,sy,ex,ey; char ss[350][350]; int vis[350][350]; int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; struct node{ int x,y,step; }q[350*350]; int bfs(int sx, int sy, int ex, int ey){ int head = 1, tail = 2; q[head].x = sx; q[head].y = sy; q[head].step = 0; vis[sx][sy] = true; while(head < tail){ for(int k = 0; k < 4; k++){ int tx = q[head].x + d[k][0]; int ty = q[head].y + d[k][1]; if(ss[tx][ty] == '='){ return q[head].step+1; } if(tx < 0 || ty < 0 || tx >= 300 || ty >= 300) continue; if(vis[tx][ty] || ss[tx][ty] == '#') continue; if(ss[tx][ty] >= 'A' && ss[tx][ty] <= 'Z'){ int tempx = tx, tempy = ty; vis[tx][ty] = true; for(int i = 0; i < 300; i++){ for(int j = 0; j < 300; j++){ if(ss[i][j] == ss[tx][ty] && !vis[i][j]){ tx = i; ty = j; break; } } } vis[tempx][tempy] = false; } q[tail].x = tx; q[tail].y = ty; q[tail].step = q[head].step + 1; if(ss[tx][ty] < 'A' || ss[tx][ty] > 'Z') vis[tx][ty] = true; tail++; } head++; } } int main(){ scanf("%d%d",&n,&m); for(int i = 0; i < n; i++) scanf("%s",ss[i]); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(ss[i][j] == '='){ ex = i; ey = j; } if(ss[i][j] == '@'){ sx = i; sy = j; } } } cout << bfs(sx,sy,ex,ey); return 0; } ``` 为什么我改成这个就对了QAQ
by letusgo @ 2024-02-11 10:50:13


|