zoukankan      html  css  js  c++  java
  • P1451 求细胞数量

    P1451 求细胞数量

    解读一下题目(结合样例)

    其实所有非零数字性质都是一样的,方便起见把他们都处理为1

    因此这个阵中只有0,1两个数字

    此时我们把0数字虚化(再摘下眼镜)

    您会发现有4个细胞(4个小聚落)

    一定要注意这个样例!!!

    一定要注意这个样例!!!

    一定要注意这个样例!!!

     

    他在输入细胞的时候,是把他当做一个字符串输入的(泥看每个数字之间没有空格鸭)

    在你输入行,列数目以后,打个空格,免得和以后的“细胞”混淆

           代码处理:

    我的代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<cstdlib>
    using namespace std;
    int n,m;
    int bz[1000][1000],num=0;
    int dx[4]={-1,0,1,0},    // 上下左右寻找
        dy[4]={0,-1,0,1};
        
    void doit(int p,int q)
    {
        num++;bz[p][q]=0;    //用后清零,防止多次计数
        int x,y,t,w;
        int h[1000][2];
        h[1][1]=p;h[1][2]=q;
        t=0;w=1;
        do
        {
            t++;
            for(int i=0;i<=3;i++)
            {
                x=h[t][1]+dx[i];
                y=h[t][2]+dy[i];
                if(x>=0&&x<n&&y>=0&&y<m&&bz[x][y])  //防止出界
                {
                    w++;    //入队
                    h[w][1]=x;
                    h[w][2]=y;
                    bz[x][y]=0;   //用后清零,防止多次计数
                }
                
            }
        }while(t<w);   //t=w时,队列为空
        
    }
    int main()
    {
        
        scanf("%d%d
    ",&n,&m);
    for(int i=0;i<n;i++)
          for(int j=0;j<m;j++)
          bz[i][j]=1;          //先把他都当做1,出现了0再处理为0
        char s[1000];
        for(int i=0;i<n;i++)
        {
            gets(s);
           for(int j=0;j<m;j++)
    if(s[j]=='0')
     bz[i][j]=0;
        }
        
        for(int i=0;i<n;i++)
          for(int j=0;j<m;j++)
          if(bz[i][j])
          doit(i,j);
        
        printf("%d",num);
        return 0;
        
    }

    柏树:(泥就当我没有写上下面这些代码吧)

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<algorithm>
    #include<string>
    #include<cstring>
    using namespace std;
    int bz[1000][1000],num=0,n,m;
    int dx[4]={-1,0,1,0},
        dy[4]={0,1,0,-1};
    void doit(int p,int q)
    {
        int x,y,t,w,i;
        int h[1000][2];
        num++;
        bz[p][q]=0;
        t=0;w=1;h[1][1]=p;h[1][2]=q;
        do
        {
            t++;
            for(i=0;i<=3;i++)
            {
                x=h[t][1]+dx[i];
                y=h[t][2]+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&bz[x][y])
                {
                    w++;
                    h[w][1]=x;
                    h[w][2]=y;
                    bz[x][y]=0;
                    
                }
            }
        }while(t<w);
    }
    int main()
    {
        int i,j;
        char s[100],ch;
        scanf("%d%d
    ",&m,&n);
        for(i=0;i<=m-1;i++)
          for(j=0;j<=n-1;j++)
          bz[i][j]=1;
          
        for(i=0;i<=m;i++)
        {
            gets(s);
            for(j=0;j<=n-1;j++)
              if(s[j]=='0')
              bz[i][j]=0;
        }
        
        for(i=0;i<=m-1;i++)
          for(j=0;j<=n-1;j++)
          if(bz[i][j])
          doit(i,j);
        cout<<num;
        
        
        return 0;
    }

    柏树原题(广搜)

    柏树类原题(队列)

    其实他们的本质啊。。。和人类的本质是一样的

  • 相关阅读:
    输入重定向,输出重定向,管道相关内容及实现方法
    真正理解linux的inode?
    5分钟让你明白“软链接”和“硬链接”的区别
    linux umask使用详解
    浅谈Linux下mv和cp命令的区别
    Echarts中窗口自适应
    Echarts中series循环添加数据
    Echarts中tooltip格式化数据
    解决MySQL远程连接很慢问题
    解决Linux(CentOS) mysql命令:-bash: mysql: command not found
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10692724.html
Copyright © 2011-2022 走看看