连通块问题[‘0‘]
家人们今天来写深度优先里的联通块问题的分析️首先来讲讲什么是连通块连通块问题指在给定的图或矩阵中寻找所有相互连通的元素组成的集合。连通性通常定义为相邻元素的直接或间接连接如上下左右相邻或对角线相邻。这类问题常见于图像处理、网络分析、迷宫求解等领域而下面这道题就是一道典型的连通块问题题目描述一矩形阵列由数字 00 到 99 组成数字 11 到 99 代表细胞细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞求给定矩形阵列的细胞个数。输入格式第一行两个整数代表矩阵大小 n 和 m。接下来 n 行每行一个长度为 m 的只含字符0到9的字符串代表这个 n×m 的矩阵。输出格式一行一个整数代表细胞个数。输入输出样例输入数据 14 10 0234500067 1034560500 2045600671 0000000089输出数据 14那么这种题怎么做❓️菲娜来讲️诸位作为Cの老朋友主函数的输入不必说输入后将值传到☞函数dfs需要多次循环时需要一个☝if来判断此时的值是否是不是♀️障碍如果不是就上⬆️传且计数就完啦✌️dfs部分主要就分为三步_(:з」∠)_第一步 边界判断判断是否不越界且不是♀️障碍物或不可走等if(此行1||此行总行||此列1||此列总列||a[x][y](此处)障碍物){return ;结束}第二步 标记诸位想一下我们在走完后如果不标记走过是不是会像鬼打墙一样一直搜索下去❓️YES❗️所以我们要做标记.两种方法1. 设定一个状态数组如flag[205][205];flag[此行][此列]1(表示已走标记)2. 查看题目需求如果可以咱就直接用原数组被输入的数组去做标记就可以了.但是家人们注意这里的标记咱要用障碍物来标记也就是直接将数据改为障碍物a[此行][此列]障碍物(表示已走标记)第三步 状态拓展方法1一般的状态拓展有两种1.四个方位上下左右dfs(x1,y);dfs(x-1,y);dfs(x,y-1);dfs(x,y1)2.八个方向上下左右右上右下左上左下dfs(x1,y);dfs(x-1,y);dfs(x,y-1);dfs(x,y1);dfs(x1,y-1);dfs(x-1,y1);dfs(x-1,y-1);dfs(x1,y1);方法二我们可以将坐标变化编成数组存起来再使用循环于此行此列相加.这个方法在八位时使用它的方便更突出.int dx[5]{0,0,-1,1},dy[5]{1,-1,0,0}//记得行和列的数要相对应for(i1;i8或4;i){dfs(xdx[i],ydy[i]);}对了✅️家人们你们记得在dfs前加void哦.连通块问题的基本格式菲娜就讲完啦️拜拜有问题记得说哦GOODBEY┏(0)┛
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2551832.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!