zoukankan      html  css  js  c++  java
  • 数细胞

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

    第一行输入两个整数,分别代表矩阵的行和列 输入m*n的矩阵,由数字0到9组成。

    输入:

    4 10
    1 2 3 4 5 1 1 1 6 7 
    1 0 3 4 5 6 1 5 1 0
    2 0 4 5 6 6 1 6 7 1
    0 0 6 0 6 6 1 0 8 9
    输出:
    1
    代码:
    #include<iostream>
    #include<queue>
    using namespace std;
    const int gx[4]={0,0,-1,1};
    const int gy[4]={1,-1,0,0};
    int m,n,total=0;
    int a[110][110];
    void init();
    void work(int,int );
    int main()
    {
        init();
        for(int i=1;i<=m;i++)   //枚举整个m*n的矩阵
            for(int j=1;j<=n;j++)
                if(a[i][j])
                    work(i,j);  //找到一个细胞,并对该细胞进行处理
        cout<<total;
        return 0;
    }
    void init()
    {
        cin>>m>>n;
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                    cin>>a[i][j];
    }
    void work(int x,int y)
    {
        queue<int>qx,qy;//两个队列分别储存当前点的行与列
        total++;
        int xx,yy;
        qx.push(x);//把当前细胞的行和列入队
     qy.push(y);
     a[x][y] = 0;//当前细胞因为已计算,赋为false
        while(!qx.empty())//当队列不为空
        {
            for(int i=0;i<4;i++)
            {
                xx=qx.front()+gx[i];
                yy=qy.front()+gy[i];
                //如果没有越界,并且(xx,yy)是细胞,入队
                if(xx>0 && xx <= m && yy>0 && yy <= n && a[xx][yy])
                {
                    qx.push(xx);
                    qy.push(yy);
                    a[xx][yy] = 0;
                }
            }
            //for循环结束,a[x][y]相邻细胞处理完成,将其出队
            qx.pop();
            qy.pop();
        }
    }
  • 相关阅读:
    启用EMF的自动生成UUID功能
    关于web开发使用utf8编码所需的配置
    Cognos8安装使用问题记录
    ILOG JViews Diagrammer使用记录
    四种方法修改Palm Simulator使用的ROM
    无光驱笔记本n410c装windows xp总结
    JSF开发问题和解决
    Equinox OSGi服务器应用程序的配置步骤
    从google获得大尺寸地图图片文件
    Amazon EC2配置步骤和一些问题
  • 原文地址:https://www.cnblogs.com/huyao/p/6664987.html
Copyright © 2011-2022 走看看