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