题目链接:https://www.luogu.org/problemnew/show/P2298
对于迷宫问题,bfs是比较好的选择。
直接bfs模板
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; char a[2001][2001]; int fx[4] = {1,0,-1,0}; int fy[4] = {0,1,0,-1}; int n,m,sx,sy,ex,ey; struct point{ int x,y,t; }q[4000001]; void dfs() { int head = 1,tail = 2; q[head].x = sx, q[head].y = sy, q[head].t = 0; while(head != tail) { for(int i = 0; i < 4; i++) { int nowx = q[head].x+fx[i]; int nowy = q[head].y+fy[i]; if(nowx == ex && nowy == ey) { printf("%d",q[head].t+1); return ; } if(nowx > n || nowx <= 0 || nowy > m || nowy <= 0 || a[nowx][nowy] == '#') continue; a[nowx][nowy] = '#'; q[tail].x = nowx; q[tail].y = nowy; q[tail].t = q[head].t+1; tail++; } head++; } printf("No Way!"); } int main() { cin>>n>>m; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) { cin>>a[i][j]; if(a[i][j]=='d') { ex = i; ey = j; } if(a[i][j]=='m') { sx = i; sy = j; } } dfs(); return 0; }