HDU 1728 逃离迷宫

来源:互联网 发布:网络销售工作12小时 编辑:程序博客网 时间:2024/05/22 15:43

bfs

搞清楚是转弯而不是步数。所以需要一个方向一直走下去直到边界或者墙。

还有就是注意题意。给出起点终点的 x,y 位置是交换的。 题目是下标1开始。注意。


#include<cstdio>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<map>#include<stack>#include<iostream>#include<list>#include<set>#include<vector>#include<cmath>#define INF 0x7fffffff#define eps 1e-8#define LL long long#define PI 3.141592654#define CLR(a,b) memset(a,b,sizeof(a))#define FOR(i,a,n) for(int i= a;i< n ;i++)#define FOR0(i,a,b) for(int i=a;i>=b;i--)#define pb push_back#define mp make_pair#define ft first#define sd second#define sf scanf#define pf printf#define acfun std::ios::sync_with_stdio(false)#define SIZE 100+1using namespace std;char g[SIZE][SIZE];struct lx{    int x,y,t;    void init(int xx,int yy,int tt)    {        x=xx,y=yy,t=tt;    }}start,thend;int n,m;int xx[]= {0,0,-1,1};int yy[]= {-1,1,0,0};//2//5 5//.....//.....//.**.*//..*.*//.....//2 4 4 2 4void bfs(){    bool vis[SIZE][SIZE];    CLR(vis,0);    queue<lx>q;    vis[start.x][start.y]=1;    q.push(start);    while(!q.empty())    {        lx tmp=q.front();        q.pop();//        pf("%d %d t=%d\n",tmp.x,tmp.y,tmp.t);//        system("pause");        if(tmp.x==thend.x&&tmp.y==thend.y&&tmp.t<=thend.t)        {            puts("yes");            return;        }        if(tmp.t>thend.t)continue;        FOR(k,0,4)        {            lx now;            int x=tmp.x+xx[k];            int y=tmp.y+yy[k];            while(x>=0&&x<n&&y>=0&&y<m&&g[x][y]=='.')            {                if(!vis[x][y])                {                    now.init(x,y,tmp.t+1);                    vis[x][y]=1;                    q.push(now);                }                x+=xx[k];                y+=yy[k];            }        }    }    puts("no");}int main(){    int tt;    sf("%d",&tt);    while(tt--)    {        sf("%d%d",&n,&m);        char str[SIZE];        FOR(i,0,n)        sf("%s",g[i]);        int x,y,t;        sf("%d%d%d",&t,&y,&x);start.init(x-1,y-1,-1);        sf("%d%d",&y,&x);thend.init(x-1,y-1,t);        //pf("%d %d == %d %d\n",start.x,start.y,thend.x,thend.y);        bfs();    }}


0 0