现在的位置: 首页 > 综合 > 正文

hdu 1728 逃离迷宫 BFS

2017年11月15日 ⁄ 综合 ⁄ 共 1072字 ⁄ 字号 评论关闭



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;
}

抱歉!评论已关闭.