洛谷传送门

解析

乍一看:bfs板子题

冰法师最棒了

然鹅
看了一眼数据范围
心中已有画面

《面 堂 发 黑》

怎么办嘞?

我们想到:
因为该题来与去的可逆性
我们搜一次后,这些点以后都不会再用到
而且每次覆盖到的所有点答案都是一样的
由于第一个结论,我们不必再费心保留原图
由于第二个结论,我们可以用DP来解决
但熟悉bfs模板的小朋友都知道:
bfs模板中途是无法记录都曾有哪些元素曾进队的
(顺道送个bfs模板):

oid bfs(int x,int y){queue<int>xq;queue<int>yq;xq.push(x);yq.push(y);while(!xq.empty()){int X,Y;X=xq.front();Y=yq.front();int nx,ny;for(int i=0;i<=3;i++){nx=X+dx[i];ny=Y+dy[i];if(nx<=m&&nx&&ny<=n&&ny&&a[nx][ny]){a[nx][ny]=0;xq.push(nx);yq.push(ny);}}xq.pop();yq.pop();}return;
}

解决方法1:

做一个数组存所有进过队的元素,或者直接用指针手写队列
但为了显出我们的高级 更好的代码效率
可以使用

解决方法2:

把坐标的两个数存进一个hash数k中
用same[i][j]=k表示(i,j)的答案与k所对应的答案相等
这样dp只需存入起点答案,其他点用same映射即可

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<deque>
#include<set>
#include<string>
using namespace std;
int a[1005][1005];
long long same[1005][1005];
long long dp[1005][1005];
int jd[1005][1005];
int m,n;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
long long hash(int a,int b){return a*1331+b;
}
long long bfs(int x,int y){if(same[x][y]){long long b=same[x][y] % 1331;long long a=same[x][y] / 1331;return dp[a][b];}if(dp[x][y]) return dp[x][y];queue<int>xq;queue<int>yq;xq.push(x);yq.push(y);jd[x][y]=0;int tot=1;while(!xq.empty()){int X,Y;X=xq.front();Y=yq.front();int nx,ny;for(int i=0;i<=3;i++){nx=X+dx[i];ny=Y+dy[i];if(nx<=m&&nx&&ny<=m&&ny&&a[nx][ny]+a[X][Y]==1&&jd[nx][ny]){jd[nx][ny]=0;same[nx][ny]=hash(x,y);tot++;xq.push(nx);yq.push(ny);}}//a[X][Y]=-10;xq.pop();yq.pop();}return dp[x][y]=tot;
}
int main(){int t,r;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){scanf("%1d",&a[i][j]);dp[i][j]=same[i][j]=0;jd[i][j]=1;}}for(int i=1;i<=n;i++){scanf("%d%d",&t,&r);printf("%lld\n",bfs(t,r));} return 0;
}

AC快乐!!!

(点赞评论了解一下qwq)

bfs:01迷宫(洛谷P1141)相关推荐

  1. 洛谷P1141 01迷宫

    因为各种乱七八糟的原因,学搜索实在是学了太久了也咕了好久博客啊.准备再做一遍之前写过的题顺便补一下博客qwq 01迷宫 [题目链接](https://www.luogu.org/problemnew/ ...

  2. 洛谷P1141 01迷宫【记忆化搜索】

    题目链接:P1141 01迷宫 程序说明: 可以用bfs来做,但是数据毒瘤,如果每次询问都运行一次bfs,会有三个TLE..可以将路途经过的点储存起来并且记录答案,如果询问的点已经被记录了答案,直接输 ...

  3. 图论算法——幻象迷宫(洛谷 P1363)

    题目选自洛谷P1363 大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样 然后问你是不是###可以走无限远. ###那么,我们可以很清晰的意识到,如果可以从点(x,y)出发,达到 ...

  4. 二分+BFS——刺杀大使(洛谷 P1902)

    题目选自洛谷P1902 我们在题面中看到了最大值最小 这五个字. 很容易就想到了二分答案. 同时题目涉及图,以及只能从四个方向,所以想到了BFS的解法 将这两种方法一起使用,就得到了答案! 题目描述 ...

  5. 深度优先搜索——迷宫(洛谷 P1605)

    题目选自洛谷P1605 题目是非常经典以及简单的DFS题目 这里给出模板 int dfs(int t) {if(满足输出条件){输出解;}for(int i=1;i<=尝试方法数;i++)if( ...

  6. 01迷宫(洛谷-P1141)

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  7. 洛谷 P1141 01迷宫(dfs)

    https://www.luogu.org/problem/P1141 思路:找到每一个连通块,不同连通块的标记不同,给标记赋值成该连通块的数量 1 // luogu-judger-enable-o2 ...

  8. c语言经典01背包问题——洛谷P2871

    动态规划中的经典题01背包 最近在练习动态规划希望自己能理解更透彻 输入样式: 4 6 1 4 2 6 3 12 2 7 输出样式: 23 我提交的代码: #include<stdio.h> ...

  9. P1605 迷宫 洛谷

    思路:从起点开始,向四个方向dfs,下标越界或有障碍物就返回,否则继续dfs,直到到达终点,每到达一次终点,ans++,最后输出ans就可以了 代码: #include<iostream> ...

最新文章

  1. golang reflect Pointer 获取 传入的interface信息
  2. dubbo源码解析-集群容错架构设计
  3. c语言printf右移,C语言printf(“”)左右(转)
  4. check the status of 'dd' in progress
  5. 使用商业模式的九大模块去分析京东的商业模式_【荐读】商业模式新生代
  6. ZooKeeper 了解
  7. c++ 禁止 unsigned 和 signed 转换_令人头疼的C++复杂的类型转换,我们如何来攻克?我来让你头脑清醒...
  8. 把Unity的jdk环境添加到环境变量
  9. Windows 7下硬盘安装Ubuntu 14.10图文教程【硬盘安装】
  10. 计算机rank函数排名怎么用,用好RANK函数 跨表排名不用愁
  11. C#如何在Windows上接入蓝牙设备
  12. Android 实现分割线的几种方式
  13. Named Route index has a default child route. When navigating to this named route to name index
  14. 选型宝访谈:当超融合一体机,具备云计算的基因,将会怎样?
  15. 大学计算机应用基础与计算思维,计算思维在二本院校计算机应用基础课程中应用.doc...
  16. 汽车以太网技术及测试介绍
  17. 小白也能看懂的网络基础 | 02 什么是连接设备?
  18. HTML5七夕情人节表白网页(情人节满屏爱心HTML5特效) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码
  19. usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
  20. 基于TI AM335x创龙开发板U-Boot编译

热门文章

  1. mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入
  2. 11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法
  3. java struts 文件下载_Struts2文件下载实例
  4. android mvc mvp 简书,浅析 MVP,MVC,MVVM模式(Android)
  5. win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法
  6. java printwriter 文件_java – 如何使用printwriter创建和写入文件
  7. vba cad 获取宏的路径_VBA批量创建文件目录及链接,建议收藏备用
  8. java分桃子_猴子分桃子.java
  9. 汇编语言中常见的标志位: CF, PF, AF, ZF, SF,TF,IF,DF, OF
  10. POJ 3159 Candies(差分约束+SPAF)