hdu 1728 逃离迷宫 BFS

来源:互联网 发布:计算复杂性 口头算法 编辑:程序博客网 时间:2024/05/22 04:45



DFS --TLE了,,,DFS的代码:

#include<iostream>#include<cstdio>#include<memory.h>using namespace std;char maze[110][110];int vis[110][110];int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};int m,n,k,x1,y1,x2,y2,flag,direction;bool IN(int x,int y){    if(1<=x&&x<=m&&1<=y&&y<=n)        return true;    else        return false;}void DFS(int x,int y,int k1){   // printf("%d %d %d\n",x,y,k1);    if(x==x2&&y==y2 && k1<=k)    {        flag=1;        //printf("x2==%d  y2==%d  k1=%d\n",x,y,k1);        return ;    }    if(k1>k)        return;    int temp=direction;    for(int i=0;i<4;i++)    {        int x0=x+dir[i][0];        int y0=y+dir[i][1];        if(IN(x0,y0) && vis[x0][y0]==0 && maze[x0][y0]=='.')        {            if(direction==-1)            {                direction=i;                vis[x0][y0]=1;                DFS(x0,y0,0);                vis[x0][y0]=0;                direction=-1;            }            else if(direction==i)            {                vis[x0][y0]=1;                DFS(x0,y0,k1);                vis[x0][y0]=0;            }            else            {                direction=i;                vis[x0][y0]=1;                DFS(x0,y0,k1+1);                direction=temp;                vis[x0][y0]=0;            }        }    }}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d %d",&m,&n);        getchar();        for(int i=1;i<=m;i++)        {            gets(maze[i]+1); /**gets(maze[i]);*/        }        scanf("%d %d %d %d %d",&k,&y1,&x1,&y2,&x2);        direction=-1;        memset(vis,0,sizeof(vis));        vis[x1][y1]=1;        flag=0;        DFS(x1,y1,0);        if(flag==1)        {            printf("yes\n");        }        else        {            printf("no\n");        }    }    return 0;}


原创粉丝点击