帮忙测试一个小程序——OJ题,HDU 1010。细节使人很纠结!解决思路
帮忙测试一个小程序——OJ题,HDU 1010。。。。细节使人很纠结!!!
原题:http://acm.hdu.edu.cn/showproblem.php?pid=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; }