平面图判连通 蓝桥杯模拟赛题
目录
- 一、题目
- 二、分析
- 三、代码
- 四、总结
一、题目
著名设计师小蓝给蓝桥小学设计了一个教学楼。
蓝桥小学经常下雨,所以校长希望教学楼任何地方都可以连通到其它地方。
小蓝给出了教学楼的平面图,用一个 nn 行 mm 列的 0101 矩阵表示,其中 00 表示空地,11 表示教学 楼。两个相邻的 11 (上下相邻或左右相邻)之间互相可达。
请帮小蓝检查一下,是否教学楼的任意两个地方都可以连通到其它地方。
输入描述
输入的第一行包含两个整数 n, mn,m,用一个空格分隔。
接下来 nn 行,每行一个长度为 mm 的 0101 串,表示教学楼的平面图。
输出描述
如果满足要求,输出“YES”,否则输出“NO”,请注意字母全部都是大写。
输入输出样例
输入
5 6
111111
110011
011000
001111
111000
输出
YES
二、分析
这是一个平面图判连通问题,思路是从第一个1出发,dfs,看是否能走遍所有1。
三、代码
#include <iostream>
using namespace std;int n, m,num = 0,cnt = 0;
char map[500][500] = { 0 }; //存放地图信息
int vis[500][500] = { 0 }; //标志位//方向向量: 下上右左
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0}; //x,y表示当前坐标
void dfs(int x,int y)
{cnt++;vis[x][y] = 1;for (int i = 0; i < 4; i++){int nx = x + dx[i]; int ny = y + dy[i];if (nx >= 0 && ny >= 0 && nx < n && ny < m && map[nx][ny] == '1' && vis[nx][ny] == 0)dfs(nx, ny);}
}//平面图判连通,思路是dfs,从第一个'1'出发,看是否能走遍所有1
int main( )
{cin >> n >> m; //n行m列for (int i = 0;i < n;i++){for (int j = 0; j < m; j++){cin >> map[i][j];if (map[i][j] == '1')num++;}}//输入完成for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (map[i][j] == '1') //找到第一个1{dfs(i, j);if (cnt == num)cout << "YES";elsecout << "NO";return 0;}}}
}
四、总结
1、这段代码可以作为dfs的模板,dfs函数内,先标记数组,对于每个方向,如果满足在图内,且可走并未被访问过,即
nx >= 0 && ny >= 0 && nx < n && ny < m && map[nx][ny] == '1' && vis[nx][ny] == 0
那么dfs。
应该结合递归、先序遍历 在草稿纸上走一遍。
2、在走方向时,
for (int i = 0; i < 4; i++){int nx = x + dx[i]; int ny = y + dy[i];if (nx >= 0 && ny >= 0 && nx < n && ny < m && map[nx][ny] == '1' && vis[nx][ny] == 0)dfs(nx, ny);}
不能写成,
x += dx[i];
y += dy[i];
不能直接改变x、y的值,因为for循环中的下一个方向可能要用到。
平面图判连通 蓝桥杯模拟赛题相关推荐
- 第十三届蓝桥杯模拟赛(第三期)试题与题解 C++
文章目录 第十三届蓝桥杯模拟赛(第三期)试题与题解 1.试题A 题解:数制转换 2.试题B 题解:枚举 3.试题C 题解:枚举 4.试题D 题解:最小生成树 5.试题E 方法一:暴力求和 方法二:一维 ...
- 2020年蓝桥杯模拟赛2020.3.25直播笔记
2020年蓝桥杯模拟赛解题报告(CPP版本) 第八题 长草的bfs写法[我想暴力模拟O kmn] 深搜会爆 bfs像投到水里的涟漪 问题: const int dx[] = {1, 0, -1, 0} ...
- 第十三届蓝桥杯模拟赛第二期JAVA组个人题解
第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...
- 蓝桥杯模拟赛第二场(web)
文章目录 蓝桥杯模拟赛第二场(web) 1 卡片化标签页 2 随机数生成器 3 个人博客 4 学生成绩统计 5 水果摆盘 6 给页面化个妆 7 小兔子爬楼梯 8 时间管理大师 9 购物车 10 菜单树 ...
- 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)
第十四届蓝桥杯模拟赛第一期 1. 二进制位数 问题描述 答案提交 参考答案 2. 晨跑 问题描述 答案提交 参考答案 3. 调和级数 问题描述 答案提交 参考答案 程序验证 4. 山谷 问题描述 答案 ...
- 【蓝桥杯Web】大一小白参与蓝桥杯模拟赛二期web组体会
目录 前言 一.相关比赛介绍 1.ACM国际大学生程序设计竞赛 2.蓝桥杯 3.GPLT团队程序设计天梯赛 4.leetcode周赛和双周赛 5.PAT 二.蓝桥杯 1.应该参加蓝桥杯吗? 2.如何进 ...
- 第十三届蓝桥杯模拟赛(第二期)试题与题解 C++
第十三届蓝桥杯模拟赛(第二期)试题与题解 1.试题A [问题描述] 小蓝的IP地址为 192.168. * .21,其中 * 是一个数字,请问这个数字最大可能是多少 ? 题解 IP地址由四个字节组 ...
- 长沙学院2022蓝桥杯模拟赛一
长沙学院2022蓝桥杯模拟赛一_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJhttps://ac.nowcoder.com/acm/contest/26010#ques ...
- 第十四届蓝桥杯模拟赛(第三期)Java组个人题解
第十四届蓝桥杯模拟赛(第三期)Java组个人题解
- 蓝桥杯嵌入式CT117E硬件开发平台经验分享11 | 第九届蓝桥杯国赛题
基于 基于 CT117E 嵌入式竞赛板 嵌入式竞赛板 的 "电子秤"程序设计与调试 赛题硬件框图 由于赛题细节多,赛题PDF要求书放入了附件,链接后续加入.本文主要讲述本届题目的困 ...
最新文章
- 雷军坚持了 10 年的东西,现在彻底凉了
- 【arduino】arduino ISP下载程序方法,用arduino uno给M5 Module DC MOTOR下载程序
- docker安装logstash及logstash配置
- 开课吧 Python专家级编程:机制与实操
- 容器的基础 XmlBeanFactory(下篇)
- 软银准备以超400亿美元向英伟达出售Arm,交易最快下周达成
- 蔚来宣布再次完成1亿美元可转债融资
- 12c rman中输入sql命令
- Atitit nosql的概念与attilax的理解 目录 1. 常见的nosql 二、Redis,Memcache,MongoDb的特点 1 HBase	1 2. Nosql的核心nosql	1
- android反编译软件Mac,在Mac上进行安卓反编译
- RINEX 3.02版本文件格式介绍
- 解决steam无法启动gta5报错msvcp140.dll丢失
- Linux从入门到精通二(Windows:你知道我的兄弟Linux吗?)
- 使用canvas绘制一个三角形
- 计算机网络的三大功能,计算机网络的三大主要功能是什么
- Python有趣的小案例-美国队长盾牌
- 怎么用计算机搜索文件,如何查找文件 巧用Win7快速查找文件
- vim使用自定义snippets
- KUKA 机器人SPS.SUB程序解析
- 2021-08-14 《 生活大爆炸版石头剪刀布》P1328
热门文章
- 克里斯坦森:管理水平高的公司往往离崩塌不远
- Rust: HDF5文件的处理探索(to be continued.......)
- Julia: 如何转换PyPlot的X轴的日期格式?
- sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别(转)
- 【交通流预测】基于matlab BP神经网络短时交通流预测【含Matlab源码 687期】
- 【语音去噪】基于matlab小波软阈值语音降噪【含Matlab源码 531期】
- 【基础教程】基于matlab GUI界面介绍与搭建【含Matlab源码 189期】
- 【基础教程】基于matlab疫情防护动图制作【含Matlab源码 028期】
- matlab 流水灯,Matlab生成stm32代码
- 【C++】STL--常用算法