BFS计算迷宫最短步数
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxn=100; struct node { int x,y; int step; }S,T, Node; int n,m; char maze[maxn][maxn]; bool inq[maxn][maxn]= {false}; int X[4]= {0,0,1,-1}; int Y[4]= {1,-1,0,0}; bool test(int x,int y) { if(x>=n||x<0||y>=m||y<0)return false; if(maze[x][y]=='*')return false; if(inq[x][y]==true)return false; return true; } int BFS() { queue<node>q; q.push(S); while(!q.empty()) { node top=q.front(); q.pop(); if(top.x==T.x&&top.y==T.y) { return top.step; } for(int i=0; i<4; i++) { int newx=top.x+X[i]; int newy=top.y+Y[i]; if(test(newx,newy)) { Node.x=newx; Node.y=newy; Node.step=top.step+1; q.push(Node); inq[newx][newy]=true; } } } return -1; } int main() { scanf("%d %d",&n,&m); for(int i=0; i<n; i++) { getchar();//过滤每行后的换行 for(int j=0; j<m; j++) { maze[i][j]=getchar(); } maze[i][m+1]='\0'; } scanf("%d%d%d%d",&S.x,&S.y,&T.x,&T.y); S.step=0; printf("%d\n",BFS()); 5 5 ..... .*.*. .*S*. .***. ...T* 2 2 4 3 return 0; }