题目链接

solution

判断有无障碍的时候不需要以此枚举,利用前缀和,如果前缀为零证明没有障碍。

重复很多,写的很丑了,#3死活不过

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstdlib>
using namespace std;
int n,m;
const int N = 1100;
char s[N][N];
int zkx[N][N],sky[N][N],map[N][N];
int bfs() {
queue<pair<int,int> > q;
q.push(make_pair(1,1));
while(!q.empty()) {
int x=q.front().first,y=q.front().second;q.pop();
for(int j=0;y+(1<<j)<=m;j++) {
int tx=x,ty=y+(1<<j);
if(sky[tx][ty]-sky[x][y-1]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
for(int j=0;y-(1<<j)>=1;j++) {
int tx=x,ty=y-(1<<j);
if(sky[x][y]-sky[tx][ty-1]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
for(int j=0;x+(1<<j)<=n;j++) {
int tx=x+(1<<j),ty=y;
if(zkx[tx][ty]-zkx[x-1][y]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
for(int j=0;x-(1<<j)>=1;j++) {
int tx=x-(1<<j),ty=y;
if(zkx[x][y]-zkx[tx-1][ty]) break;
if(map[tx][ty]) continue;
if(s[tx][ty]=='#') {printf("%d",map[x][y]+1);exit(0);}
map[tx][ty]=map[x][y]+1;q.push(make_pair(tx,ty));
}
}
}
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
char c;cin>>c;
s[i][j]=c;
}
}
if(s[1][1]=='#') return puts("0"),0;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) sky[i][j]=sky[i][j-1]+(s[i][j]=='#'||s[i][j]=='$'?0:1);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) zkx[i][j]=zkx[i-1][j]+(s[i][j]=='#'||s[i][j]=='$'?0:1);
bfs();cout<<-1;
return 0;
}

最新文章

  1. 学习CSS 笔记
  2. C#.Net下的防抖-Debounce和节流阀-Throttle功能实现
  3. 监控redis python脚本
  4. 项目总结笔记系列 Maven Session2
  5. 【代码笔记】iOS-点击顶点处,弹出另一个小的界面
  6. C# ArcEngine创建内存图层(转载)
  7. div中的字符换行
  8. Xen、KVM和VirtualBox比拼
  9. java: cannot execute binary file
  10. sqlprofiler 常用调试方法
  11. python学习(一)
  12. Shuffle 的 5步
  13. Linux下用ls和du命令查看文件以及文件夹大小
  14. webrtc起步 - apprtc服务器搭建
  15. C#使用FFMPEG推流,并且获取流保存在本地,随时取媒体进行播放!
  16. poco
  17. 使用Core Audio实现对声卡输出的捕捉
  18. swift 判断真机还是模拟器
  19. 用CSS3实现文字描边效果【效果在这儿,创意在你!】
  20. Linux下编写动态链接库

热门文章

  1. springcloud vue.js 微服务分布式 前后分离 集成代码生成器 shiro权限 activiti工作流
  2. angular cli http请求封装+拦截器配置+ 接口配置文件
  3. Custom Diagrams
  4. Python读字节某一位的值,设置某一位的值,二进制位操作
  5. 49-在 overlay 中运行容器
  6. ERROR 1366 (HY000): Incorrect string value: &#39;\xE9\x83\x91\xE5\xB7\x9E&#39; for column &#39;aa&#39; at row 1 MySQL 字符集
  7. CentOS7 安装Python3.6.8
  8. 一个MongoDB索引走偏的案例及探究分析
  9. Linux 目录管理的相关命令
  10. 2.28秒创建一个k8s集群(非理论篇,理论自行 -- )