hdu 1728

来源:互联网 发布:淘宝优惠券微信群昵称 编辑:程序博客网 时间:2024/05/22 06:05
/*   bfs 自己写的过程中出现了不少问题   注意: 起点和终点可能是同一点    */#include <stdio.h>#include <string.h>#include <queue>#include <algorithm>#include <iostream>using namespace std;#define N 110char map[N][N];bool vis[N][N];int dir[4][2]={1,0, -1,0, 0,-1, 0,1};struct point{int x,y;int  step;       };int k,x1,y1,x2,y2;int n,m;bool check(int x,int y){if(x>=1 && x<=m && y>=1 && y<=n && map[x][y]=='.' )return 1;return 0;     }int bfs(){    queue<point> q;    point start,cur;        start.x=x1;    start.y=y1;    start.step=-1;        vis[x1][y1]=1;    q.push(start);  //////  找了半天错误         while(!q.empty())    {        cur=q.front();        q.pop();      int x=cur.x;int y=cur.y;        for(int i=0;i<4;i++)        {int xx=x + dir[i][0];int yy=y + dir[i][1];while(check(xx,yy)){if(!vis[xx][yy]){start.x=xx;start.y=yy;start.step=cur.step+1;q.push(start);vis[xx][yy]=1;if(xx==x2 && yy==y2 && start.step<=k){                           return 1;     }                  }    xx=xx + dir[i][0];yy=yy + dir[i][1];         }        }    }return 0;     }int main(){int t;scanf("%d",&t);while(t--){scanf("%d%d",&m,&n);for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)cin>>map[i][j];//for( i=1;i<=m;i++)//{//for(int j=1;j<=n;j++)//printf("%c",map[i][j]);//printf("\n");//}scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2);  memset(vis,0,sizeof(vis));         if(x1==x2 && y1==y2)    {                      printf("yes\n");               continue;                       } if(bfs())  printf("yes\n");     else    printf("no\n");}return 0;    }