【codevs 1026】逃跑的拉尔夫
来源:互联网 发布:java病毒代码 编辑:程序博客网 时间:2024/05/16 13:07
BFS+判重(used数组判断有没有用相同k步走到该点)
#include<cstdio>#include<iostream>#include<algorithm>#include<queue>#include<cstring>using namespace std;struct place{ int x,y;};queue<string> q;queue<place> p;int n,m,times;string a;const int maxn=55;bool flag=0,used[maxn][maxn][1005];char ma[maxn][maxn];void bfs(){ int cnt=1; for(int k=1;k<=times;k++) { string b=q.front(); q.pop(); int num=cnt; cnt=0; while(num--) { place c=p.front(); int x=c.x,y=c.y; if(b=="NORTH") { p.pop(); used[x][y][k]=0; for(int i=x-1;i>=1;i--) { if(ma[i][y]=='X') break; else if(ma[i][y]=='.'&&!used[i][y][k]) { p.push((place){i,y}); cnt++; used[i][y][k]=1; } } } else if(b=="SOUTH") { p.pop(); used[x][y][k]=0; for(int i=x+1;i<=n;i++) { if(ma[i][y]=='X') break; else if(ma[i][y]=='.'&&!used[i][y][k]) { p.push((place){i,y}); cnt++; used[i][y][k]=1; } } } else if(b=="WEST") { p.pop(); used[x][y][k]=0; for(int i=y-1;i>=1;i--) { if(ma[x][i]=='X') break; else if(ma[x][i]=='.'&&!used[x][i][k]) { p.push((place){x,i}); cnt++; used[x][i][k]=1; } } } else if(b=="EAST") { p.pop(); used[x][y][k]=0; for(int i=y+1;i<=m;i++) { if(ma[x][i]=='X') break; else if(ma[x][i]=='.'&&!used[x][i][k]) { p.push((place){x,i}); cnt++; used[x][i][k]=1; } } } } }}int main(){ memset(used,0,sizeof(used)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>ma[i][j]; if(ma[i][j]=='*') p.push((place){i,j}),ma[i][j]='.',used[i][j][0]=1; } scanf("%d",×); for(int i=1;i<=times;i++) { cin>>a; q.push(a); } bfs(); while(!p.empty()) { place ha=p.front(); ma[ha.x][ha.y]='*'; p.pop(); } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cout<<ma[i][j]; } cout<<endl; } return 0;}
深搜版(orz Loi_Leporidae)
#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>using namespace std;int r,c,times,sx,sy;char mp[55][55];char a[55];int d[1005];bool ans[55][55],vis[55][55][1005];int dx[5]={0,-1,1,0,0};//N S E Wint dy[5]={0,0,0,1,-1};bool could(int x,int y,int step){ if(x>=1&&x<=r) { if(y>=1&&y<=c) { if(mp[x][y]!='X') { if(!vis[x][y][step]) return true; } } } return false;}void dfs(int x,int y,int di,int step){ if(step==times+1) { ans[x][y]=1; return; } vis[x][y][step]=1; if(could(x+dx[di],y+dy[di],step)) dfs(x+dx[di],y+dy[di],di,step); if(could(x+dx[d[step+1]],y+dy[d[step+1]],step+1)) dfs(x+dx[d[step+1]],y+dy[d[step+1]],d[step+1],step+1);}int main(){ scanf("%d%d",&r,&c); for(int i=1;i<=r;i++) { scanf("%s",a+1); for(int j=1;j<=c;j++) { mp[i][j]=a[j]; if(a[j]=='*') { mp[i][j]='.'; sx=i,sy=j; } } } scanf("%d",×); for(int i=1;i<=times;i++) { scanf("%s",&a); if(a[0]=='N') d[i]=1; else if(a[0]=='S') d[i]=2; else if(a[0]=='E') d[i]=3; else if(a[0]=='W') d[i]=4; } dfs(sx+dx[d[1]],sy+dy[d[1]],d[1],1);//next_pos director step for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { if(ans[i][j]) printf("*"); else printf("%c",mp[i][j]); } printf("\n"); } return 0;}
阅读全文
0 0
- codevs--1026 逃跑的拉尔夫
- CodeVs 1026 逃跑的拉尔夫
- 【codevs 1026】逃跑的拉尔夫
- Codevs 1026 逃跑的拉尔夫
- Codevs 1026 逃跑的拉尔夫
- 【codevs 1026】逃跑的拉尔夫
- 【codevs 1026】逃跑的拉尔夫
- Codevs 1026 逃跑的拉尔夫
- codevs 1026 逃跑的拉尔夫
- codevs 1026 逃跑的拉尔夫
- codevs 1026 逃跑的拉尔夫 模拟
- Codevs 1026 逃跑的拉尔夫 解题报告
- codevs 1026_逃跑的拉尔夫_bfs
- CodeVS 1026 逃跑的拉尔夫 题解
- codevs 1026 逃跑的拉尔夫 BFS
- codevs 1026 逃跑的拉尔夫(BFS)
- 20160319 CodeVs 1073 家族,2033 邮票,1026 逃跑的拉尔夫
- 【codevs 1026】 逃跑的拉尔夫 (模拟/广搜)
- 解析 nginx启动期做了哪些事
- javascript中的window事件
- SDUT 2117数据结构实验之链表二:逆序建立链表
- 2012-2013 ACM-ICPC, Asia Tokyo Regional Contest Beautiful Spacing 二分 + dp + 双指针扫描
- 线程同步:锁的初步认识(三)
- 【codevs 1026】逃跑的拉尔夫
- Slam编程一 旋转向量、旋转矩阵,欧拉角、变换矩阵和四元数
- matlab中的uigetfile函数和setappdata函数
- L1,L2 正则化与过拟合问题
- Win10 配置Docker -- 运行MySQL实例篇
- Windows10上再安装个Linux系统
- 213. House Robber II
- Linux命令之head,tail
- UVA