问该程序算法结构及分析,或者改进的意见

#include #include #include #include using namespace std; typedef struct { int l, r; char dir; } node; node op[100017]; int mapp[117][117]; int n, m; int flag = 0; int step; int movee(int &x, int &y, char dir) { if(dir == 'U') { if(x-1>=0 && mapp[x-1][y] == 0) { x--; return 1; } return 0; } else if(dir == 'D') { if(x+1 < m && mapp[x+1][y] == 0) { x++; return 1; } return 0; } else if(dir == 'L') { if(y-1>=0 && mapp[x][y-1] == 0) { y--; return 1; } return 0; } else if(dir == 'R') { if(y+1=m || y=n) return ;//不在图内; if(k == step) { flag = 1; return ; } int i; for(i = 1; i < op[k].l; i++) { if(!movee(x,y,op[k].dir)) return ; } for(; i <= op[k].r; i++) { if(movee(x,y,op[k].dir)) { DFS(x,y,k+1); if(flag) return ; } else break; } return ; } int main() { int t; scanf("%d",&t); int a, b; char tt; while(t--) { scanf("%d%d",&m,&n); for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { scanf("%d",&mapp[i][j]); } } step = 0; while(1) { scanf("%d%d",&a,&b); if(a==0 && b==0) break; getchar(); scanf("%c",&tt); op[step].l = a; op[step].r = b; op[step++].dir = tt; } int ans = 0; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { flag = 0; DFS(i,j,0); if(flag) ans+=1; } } printf("%d\n",ans); } return 0; }