P3818_小A和uim之大逃离 II
来源:互联网 发布:我知你好 未再91baby 编辑:程序博客网 时间:2024/06/05 20:05
传送门
一个很简单的BFS,但注意f标记数组要开三维,来标记这个地方是嗑药到的还是没嗑药到的,因为可能不嗑药就可以到这个地方,你磕了药,然后无法到此地方,但是没有药无法在这个点移动,但你标记了,于是有药的无法拓展的这个点,导致无解(还是自己理解一下好)
#include <cstdio>#include <iostream>#include <cmath>#include <iostream>#include <cstring>#include <queue>using namespace std;struct tw{ int x,y; int step; int ful;};queue <tw> dl;int dx[]={0,1,-1,0,0};int dy[]={0,0,0,-1,1};int n,m,d,r;char map[999][999];bool f[999][999][2];int BFS(){ f[1][1][1]=1; dl.push((tw){1,1,0,1}); while(!dl.empty()) { tw now=dl.front(); dl.pop(); if(now.x==n&&now.y==m) return now.step; for(int i=1;i<=4;i++) { int xx=now.x+dx[i],yy=now.y+dy[i]; if(xx<1||yy<1||xx>n||yy>m) continue; if(f[xx][yy][now.ful]||map[xx][yy]=='#') continue; f[xx][yy][now.ful]=1; dl.push((tw){xx,yy,now.step+1,now.ful}); } if(now.ful) { int xx=now.x+d,yy=now.y+r; if(xx>=1&&yy>=1&&xx<=n&&yy<=m) if(f[xx][yy][0]==0&&map[xx][yy]=='.') { f[xx][yy][0]=1; dl.push((tw){xx,yy,now.step+1,0}); } } } return -1;}int main(){ scanf("%d%d%d%d",&n,&m,&d,&r); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>map[i][j]; printf("%d",BFS()); return 0;}
阅读全文
0 0
- P3818_小A和uim之大逃离 II
- 【洛谷P3818】小A和uim之大逃离 II
- 洛谷 P3818 小A和uim之大逃离 II
- P3818 小A和uim之大逃离 II
- 小a和uim之大逃离
- 小a和uim之大逃离
- 洛谷1373 小a和uim之大逃离
- 洛谷1373 小a和uim之大逃离
- 【洛谷 P1373 小a和uim之大逃离】dp
- 洛谷 P1373 小a和uim之大逃离
- 洛谷1373小a和uim之大逃离
- 洛谷 P1373 小a和uim之大逃离
- 洛谷 P1373 小a和uim之大逃离
- P1373 小a和uim之大逃离
- 洛谷 P1373 小a和uim之大逃离
- 洛谷 P1373 小a和uim之大逃离
- 洛谷 P1373 小a和uim之大逃离
- 洛谷P1373 小a和uim之大逃离
- Digit Generator UVA
- 新手上路系列11:多线程编程
- 【并查集入门专题1】F
- 传递与转换Json值
- H
- P3818_小A和uim之大逃离 II
- Git的点点滴滴,结合了部分Android Studio自带的版本控制功能
- 分布式版本控制系统之gitlab-简单安装
- Ubuntu 系统远程设置
- POJ 2960 S-Nim (SG定理的典型应用)
- 数据结构--七大查找算法总结
- Java二元操作符instance的用法
- oracle数据库
- 很强势的进度条表现方式RoundCornerProgressBar,(圆角,倾斜度,颜色,开关)