2 5 5 ...** *.**. ..... ..... *.... 1 1 1 1 3 5 5 ...** *.**. ..... ..... *.... 2 1 1 1 3
no yes
一次往一个方向搜到底。。。
AC-code:
#include<cstdio> #include<queue> #include<cstring> int x1,y1,x2,y2,k,n,m,vis[105][105]; char a[105][105]; using namespace std; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; struct node { int x,y,w; }p,temp; void bfs(int x1,int y1) { p.x=x1; p.y=y1; p.w=-1; queue<node>q; while(!q. empty()) q.pop(); q.push(p); while(!q.empty()) { p=q.front(); q.pop(); for(int i=0;i<4;i++) { temp.x=p.x+dx[i]; temp.y=p.y+dy[i]; temp.w=p.w+1; while(1) { if(temp.x>m||temp.x<=0||temp.w>k||temp.y>n||temp.y<=0||a[temp.x][temp.y]=='*') break; if(temp.x==x2&&temp.y==y2) { printf("yes\n"); return ; } if(!vis[temp.x][temp.y]) { vis[temp.x][temp.y]=1; q.push(temp); } temp.x+=dx[i]; temp.y+=dy[i]; } } } printf("no\n"); } int main() { int t,i,j; scanf("%d",&t); while(t--) { memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); scanf("%d%d",&m,&n); for(i=1;i<=m;i++) { getchar(); for(j=1;j<=n;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='*') vis[i][j]=1; } } scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2); bfs(x1,y1); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lin14543/article/details/47395029