当前位置: 首页 > news >正文

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(6)

目录

写在前面:

题目:P1683 入门 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述:

输入格式:

输出格式:

输入样例:

输出样例:

解题思路:

代码:

AC !!!!!!!!!!

写在最后:


写在前面:

怎么样才能学好一个算法?

我个人认为,系统性的刷题尤为重要,

所以,为了学好深度优先搜索,为了用好暴搜应对蓝桥杯,

事不宜迟,我们即刻开始刷题!

题目:P1683 入门 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述:

输入格式:

第一行两个正整数 W 和 H,分别表示小路的宽度和长度。

以下 H 行为一个 H × W 的字符矩阵。每一个字符代表一块瓷砖。

其中,. 代表安全的砖,# 代表不安全的砖,@ 代表第一块砖。

输出格式:

输出一行,只包括一个数,

即你从第一块砖开始所能安全走过的最多的砖块个数(包括第一块砖)。

输入样例:

11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........

输出样例:

59

解题思路:

我们使用深度优先搜索的时候,

第一个要注意的点是搜索的顺序,

因为我们要保证,

我们写出的递归结构能够遍历所有情况。

(以上递归搜索的基本思路,多熟悉总是好的)

 接下来是具体思路

这道题的思路就是:

1. 先遍历所有位置找到起始的点位,

2. 然后以那个点位@为起点,向上下左右四个方向搜索,

3. 搜索一次记一次数,将搜索的位置标记以防重复搜索,

继续搜索:

4. 搜索完所有位置之后就返回记录的数即可。

那么下面是代码实现:

代码:

//包常用头文件
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;int n, m;const int N = 30;//用一个二维数组接收地图
char g[N][N];//计数
int res = 0;//记录偏移量
int q[] = {1, 0, -1, 0};
int w[] = {0, 1, 0, -1};void dfs(int x, int y)
{//四个方位搜索for(int i = 0; i < 4; i++){int a = x + q[i];int b = y + w[i];//如果到边界了,就不搜索if(a < 0 || b < 0 || a >= n || b >= m) continue;//如果不是'.'就不搜索if(g[a][b] != '.') continue;//搜索完就标记g[a][b] = '#';res++;dfs(a, b);}
}int main()
{scanf("%d %d", &m, &n);//接收地图for(int i = 0; i < n; i++){scanf("%s", g[i]);}//遍历地图,找到@for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(g[i][j] == '@'){//@作为第一个位置,res++res++;dfs(i, j);break;//只有一个起始位置,找到就直接出来}}}printf("%d", res);return 0;
}

AC !!!!!!!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

http://www.lryc.cn/news/41414.html

相关文章:

  • 论文解读TCPN
  • 性能优化之防抖与节流
  • 数组模拟单链表
  • 蓝桥杯刷题第十四天
  • 面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了
  • Activiti 工作流简介
  • 【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】
  • 【C++】Google编码风格学习
  • JavaScript 中的Promise 函数
  • 学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】
  • 快看!这只猫两次登上 Github Trending !!!
  • Linux->文件系统初识
  • InfluxDB和IotDB介绍与性能对比
  • 计算机体系结构(校验码+总线)
  • JavaWeb《三》Request请求转发与Response响应
  • 断言assert
  • 【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统
  • 详解结构体内存对齐
  • 指针:程序员的望远镜
  • 【python实现学生选课系统】
  • 备受青睐的4D毫米波成像雷达,何以助力高阶自动驾驶落地?
  • 3.20算法题(一) LeetCode 合并两个有序数组
  • QT | 编写一个简单的上位机
  • DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(2/5)
  • 嵌入式学习笔记——SysTick(系统滴答)
  • Linux实操之服务管理
  • 基于Java+SpringBoot+vue的毕业生信息招聘平台设计和实现【源码+论文+演示视频+包运行成功】
  • 智能生活垃圾检测与分类系统(UI界面+YOLOv5+训练数据集)
  • 建立农村污水处理设施已经成为了当务之急!
  • 【Matlab算法】粒子群算法求解一维线性函数问题(附MATLAB代码)