算法提高课-搜索-DFS之连通性模型-AcWing 1112. 迷宫:dfs和bfs两种解法
题目分析
来源:acwing
分析:
dfs是一路搜下去,不撞南墙不回头。
dfs解法
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
char g[N][N];
bool st[N][N];
int n;
int xa, ya, xb, yb;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};bool dfs(int x, int y){if(g[xa][ya] == '#' || g[xb][yb] == '#') return false;if( x == xb && y == yb) return true;st[x][y]= true;for(int i = 0; i < 4; i ++){int a = x + dx[i], b = y + dy[i];if( a < 0 || a >= n || b < 0 || b >= n || st[a][b] || g[a][b] == '#') continue;if(dfs(a,b)) return true;}return false;
}int main(){int T;cin >> T;while( T --){cin >>n;for(int i = 0; i < n; i ++) cin >> g[i];memset(st, 0, sizeof st);cin >> xa >> ya >> xb >> yb;if(dfs(xa,ya)) puts("YES");else puts("NO");}
}
bfs解法
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N = 110, M = N * N;
PII q[M]; // 注意队列不要开小了
char g[N][N];
bool st[N][N];
int n;
bool bfs(int sx, int sy, int tx, int ty){if(g[sx][sy] == '#' || g[tx][ty] == '#') return false;if( sx == tx && sy == ty) return true;memset(st, 0, sizeof st);int dx[4] = { -1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};int hh = 0, tt =0;q[0] = {sx, sy};st[sx][sy] = true;while( hh <= tt){PII t = q[ hh ++];for(int i = 0; i< 4; i ++){int a = t.x + dx[i], b = t.y + dy[i];if( a < 0 || a >=n || b < 0 || b >= n || st[a][b] || g[a][b] == '#') continue;if( a == tx && b == ty) return true;st[a][b] = true;q[++ tt] = {a, b}; }}return false;}int main(){int T;cin >> T;while(T--){cin >> n;for(int i = 0; i < n; i ++) cin >> g[i];int sx,sy, tx,ty;cin >> sx >> sy >> tx >> ty;if(bfs(sx,sy, tx, ty)) cout << "YES" << endl;else cout << "NO" << endl;}
}
题目来源
算法提高课-搜索-DFS之连通性模型-AcWing 1112. 迷宫:dfs和bfs两种解法相关推荐
- 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法
文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 第一问:通过tarjan算法求出强连通分量并且缩点后,统计入度为0的点的个数p即可. 第二问,至少加几条边才能使图变成强连通分量?这 ...
- 算法提高课-搜索-DFS之搜索顺序-AcWing 1116. 马走日:dfs
题目分析 来源:acwing 分析: dfs分两类,一类是内部搜索,不需要恢复现场:一类是外部搜索(以整个图作为状态),需要恢复现场.这里的马走日就是状态图,需要恢复现场. 理清dfs,需要画一个搜索 ...
- 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难
题目分析 来源:acwing 只有边权为0和边权为1,两种情况.什么意思呢?两个点之间存在路径则边权为0,需要转一下连通的边权为1. 每个点可能入队多次,本质上是个dijkstra算法. 下图说明bf ...
- 算法提高课-搜索-DFS之连通性模型-AcWing 1113. 红与黑:dfs和bfs两种做法
题目分析 来源:acwing 分析: ac代码 dfs写法 dfs搜的时候需要dfs(下一状态) 本题统计连续的黑色格子数量 :从(x, y) – > (a ,b) 扩展时, cnt += df ...
- 算法提高课-搜索-DFS之搜索顺序-AcWing 1117. 单词接龙:dfs
题目分析 来源:acwing 分析:外部dfs,需要状态恢复. 字符串a的后k的字母 和字符串b的前k个字母是否相同,用substr函数判断:if(a.substr(a.size() - k, k) ...
- 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目
题目分析 来源:acwing 分析: 最小步数模型常用哈希 按照ABC的顺序来搜,得到的是字典序最小的. 这里整幅"图"是一个状态, 装进一个字符串中,然后一个状态改变到另一个状态 ...
- 算法提高课-搜索-最短路模型-AcWing 1100. 抓住那头牛:bfs
题目分析 来源:acwing 分析:bfs求最短步数,需要dist[]数组来记录最短步数. ac代码 #include<bits/stdc++.h> using namespace std ...
- 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数
题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...
- 算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径
题目分析 分析: bfs求最短路,主要原因是因为bfs是一层一层的搜,当第一次搜到终点的时候,其实就是到终点的最短路. 本题bfs倒着搜,从终点(n-1,n-1)开始搜,记录到每个点的路径nxt[][ ...
最新文章
- 深度优先搜索 和问题 简单函数递归 “加 还是不加”
- 第5章 IDA Pro
- oracle自增的两种办法,ORACLE数据库实现自增的两种方式
- Java EE业务处理流程与XML的引入
- poj3258二分法
- Linux 如何配置 SFTP 来代替单一ftp应用
- 第六次人口普查各地级市常住人口数量
- 中职计算机录取分数线是多少,中职技校录取分数线划定
- NC协议服务器端库登陆失败,NC数据库日常维护
- ASP.NET Web API项目自动生成接口文档和测试页面
- 隧道保活超时或协商超时_丰巢快递柜超时收费的法律分析
- Linux platform 设备驱动实验-基于正点原子IMX6ULL开发板
- 晨兴刘芹谈创业者这种动物:生来孤独、天道不一定酬勤
- 香港科技大学计算机实验室,香港科技大学机器人实验室科研项目
- postman实践与运用
- vue-tree-chart 组织架构-树形图-流程图(含鼠标右击事件)
- vue+PHP+MySQL
- c语言图书借阅系统源码.zip,C语言编写的图书借阅管理系统源代码.doc
- 【一 zedboard】PS端实现打印hello world
- JAVA毕业设计人事管理系统计算机源码+lw文档+系统+调试部署+数据库
热门文章
- PHP header的几种用法
- Centos mysql的安装和配置
- 单片机上使用TEA加密通信(转)
- EasyUI Combogrid Bug
- MariaDB 10.0 和 MySQL 5.6 有何不同
- 作品[RFileRead/WriteStream 练习] for s60 fp2
- 浙江大学计算机保研条件_看了就想录取的简历长啥样?保研简历千万别踩这些坑!...
- 用特征迭代次数区分minst数据集的0和1
- u-boot分析之两阶段代码分析(三)
- python 如何在linux进行调试