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; }

 

posted on 2020-03-29 21:04  二进制dd  阅读(196)  评论(0编辑  收藏  举报

导航