小韦老师@神犇营-my1063-引爆炸弹(思路)

题目:

描述

在一个 n × m 的方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。

现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把地图上的所有炸弹引爆。

输入

第一行输两个整数 n, m (1 ≤ n, m ≤ 500),用空格隔开。

接下来 n 行,每行输入一个长度为 m 的字符串,表示地图信息。 0 表示没有炸弹, 1 表示炸弹。

输出

输出一个整数,表示最少需要手动引爆的炸弹数。

输入样例1

5 5
00010
00010
01001
10001
01000

输出样例1

2

题解:

思路

整体思路:

这里的引爆炸弹实际上是在求“连通块”的数量,这里的“连通”指的是在同一行或同一列。

主要步骤:

1、用 string 数组来存储地图信息:

    const int N = 510;string G[N];

2、输入地图信息:

 cin >> n >> m;for (int i = 0; i < n; i++) {cin >> G[i];}

3、调用 DFSTrave 函数,求得最少需要手动引爆的炸弹数并赋给 cnt:

 int cnt = DFSTrave();

4、实现 DFSTrave 函数:

 // 求最少需要手动引爆的炸弹数并返回该数量 int DFSTrave() {int cnt = 0;  // 计数器,用来记录求最少需要手动引爆的炸弹数 for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {// 若该位置为炸弹,则进行深度优先遍历(实则是遍历该位置所在的“连通块”) if (G[i][j] == '1') {   DFS(i, j);cnt++;  // 计数器加 1 }}}return cnt;}

5、实现 DFS 函数:

 // 遍历 (x, y) 这个位置所在“连通块” void DFS(int x, int y) {G[x][y] = '0';  // 将值改为 0,标志已经被访问过 for (int i = 0; i < n; i++) {  // 访问 (x, y) 所在的行 if (G[i][y] == '1') DFS(i, y);}for (int j = 0; j < m; j++) {  // 访问 (x, y) 所在的列 if (G[x][j] == '1') DFS(x, j);}}

思考:

1°为什么说这道题实际上是在求“连通块”的数量?(这里的“连通”指的是在同一行或同一列)对你有什么样的启发?

2°DFS 函数中的第一行“G[x][y] = ‘0’;”是处于什么目的?请你用其他方法实现这个目的。

完整代码

#include <bits/stdc++.h>using namespace std;// 用 string 数组来存储地图信息
const int N = 510;
string G[N];
int n, m;// 遍历 (x, y) 这个位置所在“连通块”
void DFS(int x, int y) {G[x][y] = '0';  // 将值改为 0,标志已经被访问过 for (int i = 0; i < n; i++) {  // 访问 (x, y) 所在的行 if (G[i][y] == '1') DFS(i, y);}for (int j = 0; j < m; j++) {  // 访问 (x, y) 所在的列 if (G[x][j] == '1') DFS(x, j);}
}// 求最少需要手动引爆的炸弹数并返回该数量
int DFSTrave() {int cnt = 0;  // 计数器,用来记录求最少需要手动引爆的炸弹数 for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {// 若该位置为炸弹,则进行深度优先遍历(实则是遍历该位置所在的“连通块”) if (G[i][j] == '1') {   DFS(i, j);cnt++;  // 计数器加 1 }}}return cnt;
}int main() {// 输入地图信息 cin >> n >> m;for (int i = 0; i < n; i++) {cin >> G[i];}// 调用 DFSTrave 函数,求得最少需要手动引爆的炸弹数并赋给 cnt int cnt = DFSTrave();cout << cnt;  // 输出结果 return 0;
}

我是小韦老师,企者不立,跨者不行,每天进步一点点。

欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。邮箱:weichangying_wcy@163.com

小韦老师@神犇营-my1063-引爆炸弹相关推荐

  1. 小韦老师@神犇营-my0119-奥运奖牌计数

    小韦老师@神犇营-my0119-奥运奖牌计数 题目: 描述 2008 年北京奥运会,A 国的运动员参与了 n 天的决赛项目 (1 ≤ n ≤ 17). 现在要统计一下 A 国所获得的金.银.铜牌数目及 ...

  2. 小韦老师@神犇营-my1060-家谱

    小韦老师@神犇营-my1060-家谱 题目: 描述 家谱,又称族谱.宗谱等,是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书.皇帝的家谱称玉牒,如新朝玉牒.皇宋玉牒.它以记载父系家族世系.人 ...

  3. 小韦老师@神犇营-my0072-小码猿寄快递

    小韦老师@神犇营-my0072-小码猿寄快递 题目: 描述 小码猿要去寄快递,快递公司收费的标准如下: 5 千克(包括 5 千克)以内的价格为每千克 10.2 元,超过 5 千克的价格为每千克 7.5 ...

  4. 小韦老师@神犇营-my0060-捡石头

    小韦老师@神犇营-my0060-捡石头 题目: 描述 小码猿昨天捡了 3 块石头,每个石头的重量不同,如果这 3 块石头总的重量不足 100 斤,他要再去捡一块石头,让这 4 块石头的总重量正好是 1 ...

  5. 小韦老师@神犇营-my0008-请输出一首唐诗

    小韦老师@神犇营-my0008-请输出一首唐诗 题目: 请按照下面的格式输出这首唐诗,注意居中是用空格实现的.江南春唐 杜牧 千里莺啼绿映红, 水村山郭酒旗风. 南朝四百八十寺, 多少楼台烟雨中. 题 ...

  6. 小韦老师@神犇营-my1088-麻将游戏

    小韦老师@神犇营-my1088-麻将游戏 题目: 描述 在一种"麻将"游戏中,游戏是在一个有 w×h 格子的矩形平板上进行的.每个格子可以放置一个麻将牌,也可以不放(如图所示).玩 ...

  7. 神犇营-41-数字反转

    [小韦同学@神犇营-41-数字反转] 题目: 描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见 ...

  8. 神犇营-26-最大数输出

    [小韦同学@神犇营-26-最大数输出] 题目: 描述 输入三个整数,输出最大的数. 输入 输入为一行,包含三个整数,数与数之间以一个空格分开. 输出 输出一行,包含一个整数,即最大的整数. 输入样例1 ...

  9. 神犇营-my1085-面积

    [小韦同学@神犇营-my1085-面积] 题目: 描述 编程计算由 "" 号围成的下列图形的面积.面积计算方法是统计 * 号所围成的闭合曲线中水平线和垂直线交点的数目.如下图所示, ...

  10. 神犇营-49-人口增长问题

    [小韦同学@神犇营-49-人口增长问题] 题目: 描述 我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人? 输入 一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔. 输出 ...

最新文章

  1. ORACLE 几个我忍了他很多年的问题
  2. php 变量写入数据库,PHP基础/JS变量存入数据库 | 学步园
  3. 如何在 Apple Silicon (M1) 上开发 Teams App
  4. android 弹窗in,Android监听程序处于INACTIVITY(未操作状态)时间并作出相应的操作
  5. 【Python】交互式界面创建函数
  6. [原创]性能测试之“Windows性能监视器”
  7. 6种不同画法画平行线_6种电视背景墙,不同材质做法,价格是多少,你都了解嘛?...
  8. 我想和iOS大牛们交流的问题
  9. Ubuntu源码安装php-7.2.23
  10. DB2数据库编目及连接
  11. #import msxml3.dll 导致 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  12. SAP - 采购价格确定 ①
  13. iOS 日记app的制作过程(Objective-C)
  14. python代码调试工具_我猜你需要这个Python调试工具
  15. 安卓手机投屏软件_直播教程 | 安卓手机投屏队伍语音解决方案1
  16. 联想x3650服务器安装硬盘,IBM x3650 M2服务器系统安装攻略(组图)
  17. (笔记)集成电路作用解释(杂乱无章,等待质变)
  18. 文明重启怎么找回之前的服务器,文明重启房子消失怎么找回 详尽攻略助你一臂之力...
  19. 如何获取维普万方等的免费账号--在校外下载维普万方等全文
  20. 深度学习之环境配置--配置d2lzh_pytorch包

热门文章

  1. pyecharts(9)-动态可视化-树形图-思维导图
  2. RFID定位技术下的智能养老系统具有哪些优势呢?--新导智能
  3. matlab四大取整函数fix,floor,ceil,round
  4. java jpa是什么_jpa是什么框架?jpa是什么意思?
  5. 数据分析在银行业应用之欺诈检测
  6. kubernetes mysql pxc_PXC快速入门
  7. Windows 各平台远程桌面客户端
  8. cad角度怎么画_初学入门CAD,就这样成精了!
  9. 国家开放大学计算机网络技术毕业设计,精编国家开放大学毕业论文:购物网站设计...
  10. 信息学奥赛一本通(C++版)在线评测系统 1887:【15NOIP提高组】神奇的幻方