题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
逃跑的拉尔夫 | ★☆☆☆☆ | 答案正确 | 100 | 2014/12/04 23:13:53 | 超时(30) |
有一些点不可以走的二维地图上,汽车能向四个方向移动,给出移动方向序列(不包括距离),求最终可能停在的点集。
1026.cpp代码已折叠
展开折叠内容
|
---|
#include<cstdio> #include<string> #include<iostream> using namespace std; const int dirX[4]={-1,1,0,0},dirY[4]={0,0,-1,1}; int R,C,N,ii,ij,d[3000]={}; char Map[1000][1000]={}; bool dp[100][100][2000]={}; const bool inReg(const int &i,const int &j) { if(i<=0||i>R||j<=0||j>C) return 0; return 1; } void dfs(const int &i,const int &j,const int &dir) { if(dp[i][j][dir]) return; dp[i][j][dir]=1; if(dir==N+1) { Map[i][j]='*'; return; } for(int s=1;1;++s) { int newI=i+dirX[d[dir]]*s,newJ=j+dirY[d[dir]]*s; if(!inReg(newI,newJ)) return; if(Map[newI][newJ]=='X') return; dfs(newI,newJ,dir+1); } } int main() { cin>>R>>C; for(int i=1;i<=R;++i) for(int j=1;j<=C;++j) { cin>>Map[i][j]; if(Map[i][j]=='*') ii=i, ij=j, Map[i][j]='.'; } cin>>N; for(int i=1;i<=N;++i) { string p; cin>>p; if(p=="NORTH") d[i]=0; else if (p=="SOUTH") d[i]=1; else if (p=="WEST") d[i]=2; else d[i]=3; } dfs(ii,ij,1); for(int i=1;i<=R;++i) { for(int j=1;j<=C;++j) cout<<Map[i][j]; cout<<endl; } //cin>>N; } |