Hdu---1010

来源:互联网 发布:mac系统怎么更新不了 编辑:程序博客网 时间:2024/06/07 04:53

深度优先搜索 迷宫-固定时间是否找到出口

#include<iostream>#include<string.h>#include<stdlib.h>using namespace std;char map[109][109];int n,m,t,di,dj;bool escape;int dir[4][2]= {{0,-1},{0,1},{1,0},{-1,0}};void dfs(int si,int sj,int cnt){    int i,temp;    if(si>n||sj>m||si<=0||sj<=0) return;    if(cnt==t&&si==di&&sj==dj)    escape=1;    if(escape) return;    temp=(t-cnt)-abs(si-di)-abs(sj-dj);//奇偶性剪枝    if(temp<0||temp&1) return;    for(i=0; i<4; i++)    {        if(map[si+dir[i][0]][sj+dir[i][1]]!='X')        {            map[si+dir[i][0]][sj+dir[i][1]]='X';            dfs(si+dir[i][0],sj+dir[i][1],cnt+1);            map[si+dir[i][0]][sj+dir[i][1]]='.';        }    }    return;}int main(){    int i,j,si,sj;    while(cin>>n>>m>>t)    {        if(n==0&&m==0&&t==0) break;        int wall=0;        for(i=1; i<=n; i++)            for(j=1; j<=m; j++)            {                cin>>map[i][j];                if(map[i][j]=='S')                {                    si=i;                    sj=j;                }                else if(map[i][j]=='D')                {                    di=i;                    dj=j;                }                else if(map[i][j]=='X') wall++;            }        if(n*m-wall<=t)        {            cout<<"NO"<<endl;            continue;        }        escape=0;        map[si][sj]='X';        dfs(si,sj,0);        if(escape)          cout<<"YES"<<endl;        else cout<<"NO"<<endl;    }    return 0;}
0 0
原创粉丝点击