读书人

帮忙测试一个小程序OJ题HDU 101

发布时间: 2012-03-23 12:06:21 作者: rapoo

帮忙测试一个小程序——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;} 



[解决办法]
请试以下例子

4 2 6
.D
.X
.S
..
0 0 0

读书人网 >软件架构设计

热点推荐