读书人

hdu 1728 逃出迷宫(广搜)

发布时间: 2012-11-22 00:16:41 作者: rapoo

hdu 1728 逃离迷宫(广搜)

看题目请点这里

题意:

中问题不解释。

代码:

#include<cstring>#include<queue>#include<iostream>        using namespace std ;struct Node {int x,y,s;};int m,n,k,x1,y1,x2,y2,i;int flag[101][101],dir[4][2]={0,-1,0,1,-1,0,1,0};char map[101][101];int bfs()    {    Node q1,q2;    queue<Node>Q;   q2.x=x1;q2.y=y1;q2.s=-1;   //起点不算,所以从-1开始Q.push(q2);    while(Q.empty()==0)        {    q1=Q.front();        Q.pop() ;          for(i=0;i<4;i++)            {                q2.x=q1.x+dir[i][0] ;                 q2.y=q1.y+dir[i][1] ; q2.s=q1.s+1;            while( q2.x>0 && q2.x<=n && q2.y>0 && q2.y<=m && map[q2.y][q2.x]=='.' && q2.s<=k)                {    if(q2.x==x2 && q2.y==y2)    {    return 1;     }if(flag[q2.y][q2.x]==0){Q.push(q2); flag[q2.y][q2.x]=1;}q2.x+=dir[i][0] ;   //按一个方向搜到底q2.y+=dir[i][1] ;            }            }        }        return 0;     }    int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d %d",&m,&n);        for(i=1;i<=m;i++)        {            scanf("%s",&map[i][1]);        }        scanf("%d %d %d %d %d",&k,&x1,&y1,&x2,&y2);if(x1==x2 && y1==y2){puts("yes");continue;}memset(flag,0,sizeof(flag));flag[y1][x1]=1;puts(bfs() ? "yes" : "no");    }    return 0;}


读书人网 >编程

热点推荐