题目分析



来源: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两种解法相关推荐

  1. 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 第一问:通过tarjan算法求出强连通分量并且缩点后,统计入度为0的点的个数p即可. 第二问,至少加几条边才能使图变成强连通分量?这 ...

  2. 算法提高课-搜索-DFS之搜索顺序-AcWing 1116. 马走日:dfs

    题目分析 来源:acwing 分析: dfs分两类,一类是内部搜索,不需要恢复现场:一类是外部搜索(以整个图作为状态),需要恢复现场.这里的马走日就是状态图,需要恢复现场. 理清dfs,需要画一个搜索 ...

  3. 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难

    题目分析 来源:acwing 只有边权为0和边权为1,两种情况.什么意思呢?两个点之间存在路径则边权为0,需要转一下连通的边权为1. 每个点可能入队多次,本质上是个dijkstra算法. 下图说明bf ...

  4. 算法提高课-搜索-DFS之连通性模型-AcWing 1113. 红与黑:dfs和bfs两种做法

    题目分析 来源:acwing 分析: ac代码 dfs写法 dfs搜的时候需要dfs(下一状态) 本题统计连续的黑色格子数量 :从(x, y) – > (a ,b) 扩展时, cnt += df ...

  5. 算法提高课-搜索-DFS之搜索顺序-AcWing 1117. 单词接龙:dfs

    题目分析 来源:acwing 分析:外部dfs,需要状态恢复. 字符串a的后k的字母 和字符串b的前k个字母是否相同,用substr函数判断:if(a.substr(a.size() - k, k) ...

  6. 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目

    题目分析 来源:acwing 分析: 最小步数模型常用哈希 按照ABC的顺序来搜,得到的是字典序最小的. 这里整幅"图"是一个状态, 装进一个字符串中,然后一个状态改变到另一个状态 ...

  7. 算法提高课-搜索-最短路模型-AcWing 1100. 抓住那头牛:bfs

    题目分析 来源:acwing 分析:bfs求最短步数,需要dist[]数组来记录最短步数. ac代码 #include<bits/stdc++.h> using namespace std ...

  8. 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数

    题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...

  9. 算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径

    题目分析 分析: bfs求最短路,主要原因是因为bfs是一层一层的搜,当第一次搜到终点的时候,其实就是到终点的最短路. 本题bfs倒着搜,从终点(n-1,n-1)开始搜,记录到每个点的路径nxt[][ ...

最新文章

  1. 深度优先搜索 和问题 简单函数递归 “加 还是不加”
  2. 第5章 IDA Pro
  3. oracle自增的两种办法,ORACLE数据库实现自增的两种方式
  4. Java EE业务处理流程与XML的引入
  5. poj3258二分法
  6. Linux 如何配置 SFTP 来代替单一ftp应用
  7. 第六次人口普查各地级市常住人口数量
  8. 中职计算机录取分数线是多少,中职技校录取分数线划定
  9. NC协议服务器端库登陆失败,NC数据库日常维护
  10. ASP.NET Web API项目自动生成接口文档和测试页面
  11. 隧道保活超时或协商超时_丰巢快递柜超时收费的法律分析
  12. Linux platform 设备驱动实验-基于正点原子IMX6ULL开发板
  13. 晨兴刘芹谈创业者这种动物:生来孤独、天道不一定酬勤
  14. 香港科技大学计算机实验室,香港科技大学机器人实验室科研项目
  15. postman实践与运用
  16. vue-tree-chart 组织架构-树形图-流程图(含鼠标右击事件)
  17. vue+PHP+MySQL
  18. c语言图书借阅系统源码.zip,C语言编写的图书借阅管理系统源代码.doc
  19. 【一 zedboard】PS端实现打印hello world
  20. JAVA毕业设计人事管理系统计算机源码+lw文档+系统+调试部署+数据库

热门文章

  1. PHP header的几种用法
  2. Centos mysql的安装和配置
  3. 单片机上使用TEA加密通信(转)
  4. EasyUI Combogrid Bug
  5. MariaDB 10.0 和 MySQL 5.6 有何不同
  6. 作品[RFileRead/WriteStream 练习] for s60 fp2
  7. 浙江大学计算机保研条件_看了就想录取的简历长啥样?保研简历千万别踩这些坑!...
  8. 用特征迭代次数区分minst数据集的0和1
  9. u-boot分析之两阶段代码分析(三)
  10. python 如何在linux进行调试