帮忙测试一个小程序——OJ题,HDU 1010。细节使人很纠结!解决思路

帮忙测试一个小程序——OJ题,HDU 1010。。。。细节使人很纠结!!!
原题:http://acm.hdu.edu.cn/showproblem.php?pid=1010
只要帮忙找出我这个程序通不过的测试数据就可以了,实在找不出问题出在哪儿?????
C/C++ code
#include<iostream>
#include<vector>
#include<fstream>///
using namespace std;
char a[10][10];
typedef struct fxy{
    int x0;
    int y0;
}fxy;
typedef struct mark{
    int r,l,u,d;
}mark;
vector<fxy> s;

int find(int x, int y){
    for(unsigned int i=0; i<s.size(); i++)
        if(s[i].x0==x && s[i].y0==y) return 0;
    return 1;
}

int main(){
    int x,y,n,m,t,origin[2];

    fxy st;
    ifstream in("hdu_1010.txt");////从文件中读取数据,用于测试
    while(in>>n>>m>>t && (n!=0||m!=0||t!=0)){ ////
        int te=0,flag=0,temp=1;
        mark mk[10][10];
        if(n==0 || m==0 || t==0) temp=0;
        for(int i=0; i<=n+1; i++){            
            a[i][0]='X'; a[i][m+1]='X';
        }
        for(int i=0; i<=m+1; i++){
            a[0][i]='X'; a[n+1][i]='X';
        }
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++){                
                in>>a[i][j];////
                if(a[i][j]=='S') origin[0]=i,origin[1]=j;
                mk[i][j].r=0,mk[i][j].l=0,mk[i][j].u=0,mk[i][j].d=0;
            }
        x=origin[0], y=origin[1];  
        st.x0=x,st.y0=y;
        s.push_back(st); 

        while(temp){
            if(s.empty() || flag) break;

            if(mk[x][y].r==0 ){ 
                mk[x][y].r=1; 
                if(a[x][y+1]!='X' && a[x][y+1]!='S'&& find(x,y+1)){
                    if(a[x][y+1]=='D' && te+1==t) flag=1;
                    else{ 
                          if(te+1<t  && a[x][y+1]!='D'){
                              y++; te++; st.x0=x,st.y0=y; 
                              s.push_back(st); mk[x][y].l=1;  }
                    }
                }
            }            
            else if(mk[x][y].l==0){ 
                mk[x][y].l=1;
                if(a[x][y-1]!='X' && a[x][y-1]!='S' && find(x,y-1)){
                    if(a[x][y-1]=='D' && te+1==t) flag=1;
                    else{ 
                          if(te+1<t  && a[x][y-1]!='D'){ 
                              y--; te++; st.x0=x,st.y0=y;
                              s.push_back(st);   mk[x][y].r=1;}
                    }
                }
            }
            else if(mk[x][y].u==0){
                mk[x][y].u=1; 
                if(a[x-1][y]!='X' && a[x-1][y]!='S' && find(x-1,y)){
                    if(a[x-1][y]=='D' && te+1==t) flag=1;
                    else{ 
                          if(te+1<t  && a[x-1][y]!='D'){  
                              x--; te++; st.x0=x,st.y0=y;
                              s.push_back(st); mk[x][y].d=1;}
                    }
                }
            }
            else if(mk[x][y].d==0){  
                mk[x][y].d=1; 
                if(a[x+1][y]!='X' && a[x+1][y]!='S' && find(x+1, y)){
                    if(a[x+1][y]=='D' && te+1==t) flag=1;
                    else{ 
                          if(te+1<t  && a[x+1][y]!='D'){
                              x++; te++; st.x0=x,st.y0=y;
                              s.push_back(st);  mk[x+1][y].u=1; }
                    }
                }
            }
            else{   
                if(mk[s[s.size()-1].x0][s[s.size()-1].y0].r && mk[s[s.size()-1].x0][s[s.size()-1].y0].l &&
                    mk[s[s.size()-1].x0][s[s.size()-1].y0].u && mk[s[s.size()-1].x0][s[s.size()-1].y0].d){
                        s.erase(s.end()-1,s.end());
                        if(!s.empty()) x=s[s.size()-1].x0,y=s[s.size()-1].y0;
                        te--; 
                }
            }
        }
        s.clear();
        if(flag) cout<<"YES\n"; 
        else cout<<"NO\n";
    }
    return 0;
}