zoukankan      html  css  js  c++  java
  • 题目:分子团

    题目描述

    京京接受了一个用染色法测定平面内分子团数量的工作。已知没有分子的位置用0表示。被染色的部分根据其染色深度用1~9表示。由于这些分子具有特殊性,它的延展方向在平面内只有前、后、左、右4个方向。在延伸方向上相互接触的分子构成一个分子团。在一个M×N的矩形区域内,请你帮他统计出分子团的数量(X)。

    输入格式

    第一行 M N (2<=[M,N]<=100)
    第二行 N个0~9之间的数字
    ……
    第M+1行 N个0~9之间的数字

    输出格式

    X

    分析:———————————————————————————————————————————————————

    做的题目太少了,这种题是第一次做,竟花了我半个多小时,惭愧。

    floodfill 算法。

    代码实现:

    #include<iostream>
    using namespace std;

    int m,n,map[101][101],total=0;

    void dfs(int i,int j){     
         if(i+1<=m&&map[i+1][j]==1) {map[i+1][j]=0;dfs(i+1,j);}  //一定是先染色,再DFS,否则就会死循环了。
         if(i-1>=1&&map[i-1][j]==1) {map[i-1][j]=0;dfs(i-1,j);}
         if(j+1<=n&&map[i][j+1]==1) {map[i][j+1]=0;dfs(i,j+1);}
         if(j-1>=1&&map[i][j-1]==1) {map[i][j-1]=0;dfs(i,j-1);}
         }

    int main()
    {
        int i,j;char a;
        cin>>m>>n;
        for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
        {cin>>a;if(a!='0') map[i][j]=1;else map[i][j]=0;}
        for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
        if(map[i][j]==1) {dfs(i,j);total++;}
        
        cout<<total<<endl;
        return 0;

        }

  • 相关阅读:
    【知识总结】数学必修二立体几何总结
    【知识总结】数学必修四、必修五三角函数公式总结
    Apache【第一篇】安装
    Nginx【第一篇】安装
    lsb_release 提示命令不存在
    yum 命令提示语法错误
    MySQL【第三篇】数据类型
    MySQL【第二篇】基本命令
    SecureCRT 中 python 命令行使用退格键(backspace)出现 ^H 解决办法
    MySQL【第一篇】安装
  • 原文地址:https://www.cnblogs.com/noip/p/2291364.html
Copyright © 2011-2022 走看看