求细胞数量——dfs

  最近重新回顾了一下dfs,于是就打了洛谷上“求细胞数量”这一题。

  这题注意要在输入时是一个一个数字读取的,因为在输入矩阵的时候没有空格。我就随便改了一下快读。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int getin(){
    int num=0;
    char c=getchar();
    while(c>‘9‘||c<‘0‘)c=getchar();
    num=c-‘0‘;
    return num;
}
int a[101][101],n,m,ans=0;
const int tx[4]={-1,0,0,1};
const int ty[4]={0,-1,1,0};
void dfs(int x,int y){
    a[x][y]=0;
    for(int i=0;i<4;i++){
        x+=tx[i];y+=ty[i];
        if(x>0&&x<=n&&y>0&&y<=m&&a[x][y]!=0)dfs(x,y);
        x-=tx[i];y-=ty[i];
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=getin();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==0)continue;
            dfs(i,j);ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}
时间: 2024-12-12 11:06:42

求细胞数量——dfs的相关文章

【日常水题-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】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

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

TYVJ 1127 计算细胞数(DFS)

计算细胞数 From 陈超锐 描述 Description 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数. 如:阵列 0234500067 1034560500 2045600671 0000000089  有4个细胞 输入格式 InputFormat 第一行 :两个数字M N (1<=M<=50 1<=N<80)表示该阵列有M行N列  从第2行到第M+1行 每行有连续的N个字符 输出格式 Outp

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

求质数数量 - 空间换时间

质数:被自己本身和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; }

poj 1144 (Tarjan求割点数量)

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

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