P1451 求细胞数量

https://www.luogu.org/problemnew/show/P1451<----这里是原题链接

这道题的题意大致是求一个矩阵中非0联通块的个数,那么我们可以dfs每一个块

对于每一个块,ans++后把所有块中的数字归零(吃掉)

所以代码是这样的

 1 #include<iostream>
 2 #include<queue>
 3 #include<cstdio>
 4 using namespace std;
 5 const int maxn = 105;
 6 int dx[8]={-1,0,1,0};
 7 int dy[8]={0,1,0,-1};
 8 bool a[maxn][maxn];
 9 char c;
10 int n,m,ans=0;
11 void dfs(int x,int y)
12 {
13     for(int i=0;i<4;i++)
14     {
15         int xx=x+dx[i];
16         int yy=y+dy[i];
17         if(a[xx][yy]==1)
18         {
19             a[xx][yy]=0;
20             dfs(xx,yy);
21         }
22     }
23 }
24 int main()
25 {
26     cin>>n>>m;
27     for(int i=1;i<=n;i++)
28     {
29         for(int j=1;j<=m;j++)
30         {
31             cin>>c;
32             if(c==‘0‘)a[i][j]=0;
33             else a[i][j]=1;
34         }
35     }
36     for(int i=1;i<=n;i++)
37     {
38         for(int j=1;j<=m;j++)
39         {
40             if(a[i][j]==1)
41             {
42                 ans++;
43                 dfs(i,j);
44             }
45         }
46     }
47     cout<<ans;
48 }

那么这样子就解决啦!!!

原文地址:https://www.cnblogs.com/woshishabiye/p/9348278.html

时间: 2024-12-17 10:06:19

P1451 求细胞数量的相关文章

【dfs】p1451 求细胞数量

题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式### 输入格式: 输入:整数m,n(m行,n列) 矩阵 输出格式: 输出:细胞的个数 输入输出样例 输入样例#1: 4 10 0234500067 1034560500 2045600671 0000000089 输出样例#1: 4 思路: 暴力跑bfs,对每个非0的点进行dfs并把和它相邻的点赋值为0,统计数

Luogu P1451 求细胞数量

题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式 输入格式: 输入:整数m,n(m行,n列) 矩阵 输出格式: 输出:细胞的个数 输入输出样例 输入样例#1: 4 10 0234500067 1034560500 2045600671 0000000089 输出样例#1: 4 解释样例: 0234500067 1034560500 2045600671 000

【日常水题-bfs】求细胞数量

P1451 求细胞数量 一题让我学会bfs系列qaq 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int sz = 110; 5 int n, m, ans = 0; 6 int dx[4]={0,1,0,-1}; 7 int dy[4]={1,0,-1,0}; 8 int plat[sz][sz]; 9 int q[sz][3]; 10 struct node { 11 int x,

求细胞数量——dfs

最近重新回顾了一下dfs,于是就打了洛谷上"求细胞数量"这一题. 这题注意要在输入时是一个一个数字读取的,因为在输入矩阵的时候没有空格.我就随便改了一下快读. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int getin(){ int num=0; char c=getchar(); whil

求质数数量 - 空间换时间

质数:被自己本身和1整出的数 int getPrimeCount(int value){ int count = 0; int arr[301] = {0};// 0 - is prime , 1 - is not prime int num = (int)sqrt((float)value); for(int i = 2; i <= num ; ++i){ if (!arr[i]){ for(int j = i; i * j < value; ++j){ arr[i * j] = 1; }

POJ1144 Network 题解 点双连通分量(求割点数量)

题目链接:http://poj.org/problem?id=1144 题目大意:给以一个无向图,求割点数量. 这道题目的输入和我们一般见到的不太一样. 它首先输入 \(N\)(\(\lt 100\))表示点的数量(\(N=0\)表示文件输入结束). 然后接下来每行输入一组数字. 如果这一组数字只包含一个 \(0\) ,说明本组测试数据输入结束: 否则,假设这些数可以拆分成 \(a_1,a_2,a_3, \cdots ,a_m\),则说明 \(a_1\) 这个点到 \(a_2,a_3, \cdo

POJ 1791 Parallelogram Counting(求平行四边形数量)

Description There are n distinct points in the plane, given by their integer coordinates. Find the number of parallelograms whose vertices lie on these points. In other words, find the number of 4-element subsets of these points that can be written a

poj 1144 (Tarjan求割点数量)

题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码.这些线是双向的并且能使两个地点保持通讯.每个地点的线都终结于电话交换机.每个地点都有一个电话交换机.从每个地点都能通过线缆到达其他任意的地点,然而它并不需要直接连接,它可以通过若干个交换机来到达目的地.有时候某个地点供电出问题时,交换机就会停止工作.TLC的工作人员意识到,除非这个地点是不可达的,否

hiho#1445 重复旋律5 求子串数量 后缀自动机

题目传送门 题意:给出一个字符串,求子串的个数. 思路:后缀自动机的题真是每做一题就更理解一些. SAM中的每一状态$p$都代表了一种子串,而p包含的字符串的个数是$len[p]-len[fa[p]]$,所以答案就是$sigma len[i]-len[fa[i]]$,还有答案要开long long. #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long l