hdu1010Tempter of the Bone问题
测试数据都通过了,可是还是WA,调试了N久,,求大神帮助啊。。
程序代码:#include<iostream>
#include<cmath>
using namespace std;
char mp[9][9];
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
int di,dj,t,escap, n, m;
void DFS(int si,int sj,int cnt)
{
int tmp;
if(si>n || sj > m || si<=0 || sj<= 0)return ;
if(si==di && sj==dj && t==cnt){ escap=1;}
if(escap==1)return;
tmp=t-cnt-abs(si-di)-abs(sj-dj);
if(tmp<0 || tmp&1 )return ; //奇偶校检
for(int i =0 ; i< 4 ;i++)
{
if(mp[si+dir[i][0]][sj+dir[i][1]] != 'X' )
{
mp[si+dir[i][0]][sj+dir[i][1]] = 'X';
DFS(si+dir[i][0],sj+dir[i][1],cnt+1);
mp[si+dir[i][0]][sj+dir[i][1]]='.';
}
}
return;
}
int main()
{
int wall,si,sj;
while(cin>>n>>m>>t)
{
if(n==0&&m==0&&t==0)break;
wall=0;
for(int i = 1 ;i <=n ;i++)
for(int j=1 ; j<= m ;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='X')wall++;
else if(mp[i][j]=='D'){ di = i ; dj = j ; }
else if(mp[i][j]=='S'){ si = i ; sj = j ; }
}
if(n*m-wall<=t)
{
cout<<"NO"<<endl;
continue;
}
escap = 0;
mp[si][sj]='X';
DFS(si,sj,0);
if(escap == 1 )cout<<"YSE"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}









