BFS(啊哈!算法)
广度优先搜索解迷宫问题
#include<iostream> using namespace std; struct node{ int x; int y; int step; }; char map[1000][1000]; bool book[1000][1000]; int n,m,tx,ty,startx,starty,q,p,minnum; int head,tail; int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int main(){ struct node queue[2501]; bool flag=0; cin>>n>>m; cin>>startx>>starty; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>map[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(map[i][j] == 'Q'){ q=i; p=j; } } } head=1; tail=1; queue[tail].x=startx; queue[tail].y=starty; queue[tail].step=0; tail++; book[startx][starty]=1; while(head!=tail){ for(int k=0;k<4;k++){ tx=queue[head].x+dir[k][0]; ty=queue[head].y+dir[k][1]; if(tx>=0 && tx<n && ty>=0 && ty<m && map[tx][ty] !='#' && !book[tx][ty]){ book[tx][ty]=1; queue[tail].x=tx; queue[tail].y=ty; queue[tail].step=queue[head].step+1; tail++; } if(map[tx][ty] =='Q'){ flag=1; break; } } if(flag){ break; } head++; } cout<<queue[tail-1].step; return 0; }