您的位置:首页 > 其它

HDU 1728 逃离迷宫

2014-07-30 15:40 239 查看
//从一点多写到现在..中间 还参考 了写过的代码,但是还是错了..不知道为什么..有空再写;

#include<iostream>

#include<queue>

#define maxn 105 using namespace std;

char a[maxn][maxn];

bool visit[maxn][maxn];

int dir[4][2]={{0,-1},{1,0},{0,1},{-1,0}};

int x1,y1,x2,y2,t,m,n,turn;

struct node {

int x,y,dir,t;

}p,q;

bool judge(int i,int j)

{  return i>0 && i<=m && j>0 && j<=n && a[i][j]=='.'; }

void bfs() {  queue<node> game;  memset(visit,false,sizeof(visit));

q.x=y1,q.y=x1;q.t=-1;q.dir=-1;  game.push(q);  visit[q.x][q.y]=true;

while(!game.empty())

{   p=game.front();   game.pop();   for(int i=0;i<4;i++)

{    q.x=p.x+dir[i][0];q.y=p.y+dir[i][1];q.t=p.t+1;

q.dir=i%2;

if(q.t<= turn &&q.x==y2 && q.y==x2)    {     printf("yes\n");     return;    }

while(judge(q.x,q.y)&&q.t<=turn&&q.dir!=p.dir)

{     if(!visit[q.x][q.y]&&q.t<=turn-1)

game.push(q),visit[q.x][q.y]=true;            q.x+=dir[i][0];           q.y+=dir[i][1];

if(q.x==y2 && q.y==x2 && q.t<= turn)

{     printf("yes\n");     return ;    }         }  }    }

printf("no\n"); }

int main() {

//freopen("1728.txt","r",stdin);  int i,j;

scanf("%d",&t);    while(t--)   {

scanf("%d%d",&m,&n);    for(i=1;i<=m;i++)

{     getchar();     for(j=1;j<=n;j++)

scanf("%c",&a[i][j]);    }

scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&turn);

if(x1==x2 &&y1==y2 || a[y1][x1]=='*')     printf("no\n");

else bfs();   }

return 0; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: