bfs走出迷宫

题目:

https://ac.nowcoder.com/acm/problem/14572、

如果能从起点走到终点就可以,用vis来记录是否走过

如果这个地点是'.'或‘E'就是可以走的

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
char a[507][507];
int vis[507][507];
int n,m;
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int main()
{ queue<int> q;
int sx,sy,ex,ey;
  while(scanf("%d %d",&n,&m)!=EOF)
  {

            memset(vis,0,sizeof(vis));
       for(int i=0;i<n;i++)
       {
           for(int j=0;j<m;j++)
           {
               scanf(" %1c",&a[i][j]);
               if(a[i][j]=='S')
               {
                   sx=i;
                   sy=j;
               }
               if(a[i][j]=='E')
               {
                   ex=i;
                   ey=j;
               }
           }
       }
       q.push(sx*m+sy);
       vis[sx][sy]=1;
       while(!q.empty())
       {
           int t=q.front();
           q.pop();
           int x=t/m;
          int y=t%m;
          int tx,ty;
          for(int i=0;i<4;i++)
          {
              tx=x+dx[i];
              ty=y+dy[i];
              if(!vis[tx][ty]&&(a[tx][ty]=='.'||a[tx][ty]=='E')&&tx>=0&&tx<n&&ty>=0&&ty<m)
              { q.push(tx*m+ty);
                  vis[tx][ty]=1;

              }
          }

       }
       if(vis[ex][ey]==1)
        printf("Yes\n");
       else

        printf("No\n");

  }
}

  

posted @ 2021-06-09 22:09  废柴废柴少女  阅读(47)  评论(0)    收藏  举报