• 细胞数量


    题目描述

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

    输入输出格式

    输入格式:
    输入:整数m,n(m行,n列)

    矩阵

    输出格式:
    输出:细胞的个数

    输入输出样例

    输入样例#1: 复制
    4 10
    0234500067
    1034560500
    2045600671
    0000000089
    输出样例#1: 复制
    4

    这是一道很水的题,结果耗了我将近一个下午,后来才知道写代码不能开360安全卫士,否则会造成奇奇怪怪的错误qwq。。。。。深搜or宽搜都能过

    广搜:

    #include<bits/stdc++.h>
    int n,m,b[105][105],a[105][3],sum;
    int x[4]={-1,0,1,0},y[4]={0,1,0,-1};
    void bfs(int i,int j){
        int head=1,foot=2;
        b[i][j]=0;a[2][1]=i;a[2][2]=j;
        sum++;
        while(head<foot){
            head++;
            for(int q=0;q<=3;q++){
                int xx=a[head][1]+x[q];
                int yy=a[head][2]+y[q];
                if(b[xx][yy] && xx>0 && xx<=n && yy>0 && yy<=m){
                    foot++;
                    a[foot][1]=xx;
                    a[foot][2]=yy;
                    b[xx][yy]=0;
                }
            }
        }
    }
    int main(){
        scanf("%d%d",&n,&m); 
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                char c;
                scanf(" %c",&c);
                if(c!='0')  b[i][j]=1;
            }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                if(b[i][j]) bfs(i,j);
            }
        printf("%d
    ",sum);
    } 

    深搜:

    #include<bits/stdc++.h>
    int m,n,cnt;
    bool b[105][105],a[105][105];       //数组a表示细胞是否还在,如果搜过就标记为不在 
    int x[4]={0,0,1,-1},y[4]={-1,1,0,0};    //数组b表示搜没搜过,回溯 
    void dfs(int ii,int jj){
        for(int k=0;k<=3;k++){
            int i=ii+x[k];
            int j=jj+y[k];
            if(i<=m && i>=1 && j<=n && j>=1 && b[i][j]){
                b[i][j]=0;
                a[i][j]=0;
                dfs(i,j);
                b[i][j]=0;
            }
        }
    }
    int main(){
        scanf("%d%d",&m,&n);
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++){
                char c;
                scanf(" %c",&c);
                if(c!='0'){
                    b[i][j]=1;
                    a[i][j]=1;
                }
            }
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++){
                if(a[i][j]==1){dfs(i,j);cnt++;}
            }
        printf("%d",cnt);
    }
  • 相关阅读:
    Javascript之内置对象
    Javascript之匿名函数(私有变量)
    Web前端开发修炼之道 (2)
    11.标志寄存器
    10.CALL和RET指令
    Javascript之继承(其他方式)
    Javascript之Function类型
    5.[BX]和Loop指令
    JavaScript之执行环境及作用域
    Javascript之BOM(window对象)
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9677262.html
Copyright © 2020-2023  润新知