您的位置:首页 > 其它

DFS HDU1010

2016-06-09 22:42 323 查看
#include <iostream>
#include"sstream"
#include"string"
#include"algorithm"
#include"cstring"
#include"cstdio"
using namespace std;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
char g[20][20];
int escape;
int r,c,t;
int si,sj,ei,ej;
void dfs(int s,int e,int cnd)
{
if(s<0||s>=r||e<0||e>=c) return;
int temp=(t-cnd)-(abs(ei-s)+abs(ej-e));
if(temp<0||temp%2) return;
if(cnd==t&&s==ei&&e==ej) {escape=1;return;}
int i;
for(i=0;i<4;i++)
{
int ki,kj;
ki=s+dir[i][0];
kj=e+dir[i][1];
if(g[ki][kj]!='X'&&!escape)
{
g[ki][kj]='X';
dfs(ki,kj,cnd+1);
g[ki][kj]='.';
}
}
}
int main()
{
//freopen("a.txt","r",stdin);
while(cin>>r>>c>>t&&(t+c+r))
{
int i,j;
int wall=0;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
cin>>g[i][j];
if(g[i][j]=='X')
wall++;
if(g[i][j]=='D')
{
ei=i;ej=j;
}
if(g[i][j]=='S')
{
si=i;sj=j;
}
}
if(r*c-wall<t) {cout<<"NO\n";continue;}
escape=0;
g[si][sj]='X';
dfs(si,sj,0);
if(escape) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: