求细胞数量(DFS)

题面(from luogu)
求细胞数量
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100)

输入格式:
输入:整数m,n(m行,n列)
矩阵
输出格式:
输出:细胞的个数
样例.in
4 10
0234500067
1034560500
2045600671
0000000089
样例.out
4

题目分析
神似lrj书上的“黑白图像”(同一类型),但此题要注意输入的坑(是连在一起的,要注意分一下)
参考https://blog.csdn.net/c_uizrp_dzjopkl/article/details/81749290

代码

#include <bits/stdc++.h>
using namespace std;

int dx[5]={0,-1,0,0,1};   //四个方向的介值
int dy[5]={0,0,1,-1,0};
int a[109][108],vis[108][109],n,m,ans;    //vis数组是用来判断哪些元素算过的,a是存map(地图)的数组
char ch;

void search(int x,int y)    //搜索,x,y是当前的坐标
{
    if (a[x][y] == 0 || vis[x][y] == 1) return;     //走到边上了,或走过了,返回(题中的0性质与所设的围墙一样,所以并同一论了)
        else    //如果合法,继续向前探
            {
                vis[x][y]=1;    //走过的打标记
                for (int i = 1; i <= 4; i++)     //向4个方向走
                    search(x+dx[i],y+dy[i]);     //具体去走
                //本题vis数组不需要回溯,因为一部分元素只能算一次
            }
}

int main()
{
    cin>>n>>m;    //输入

    for (int i = 0; i <= n+1; i++)
        for (int j = 0; j <= m+1; j++)
            a[i][j] = 0;          //加围墙(以免走出去)

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            {
                cin>>ch;        //注意坑点,输入的数都是连在一起的
                if (ch != '0') a[i][j] = 1;  //因为所有的数都没有太大的关系,所以都可以视为1(更直观),是0在上面赋值过了
            }

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            vis[i][j] = 0;           //vis数组初始化,因为都没有找过

/*  for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
                cout<<a[i][j]<<' ';
            cout<<endl;
        }   */

    for (int i = 1; i <= n; i++)      //每一个元素都来一遍
        for (int j = 1; j <= m; j++)
            {
                if (a[i][j] == 1 && vis[i][j] == 0)     //当前的元素是一个细胞,且没找过
                    {
                        ans++;     //找到了一个细胞就+1,因单是一个元素也算,且相互有连接都只算1个
                        search(i,j);     //从当前的坐标开始搜
                    }
            } 

    cout<<ans;    //输出

    return 0; //完美的结束程序
}
                                                     **蒟蒻新星c_uizrp_dzjopkl原创**

猜你喜欢

转载自blog.csdn.net/c_uizrp_dzjopkl/article/details/81841586