zoukankan      html  css  js  c++  java
  • [BFS]细胞问题

    细胞问题


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


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

    矩阵


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


    输入输出样例


    输入 #1

    4 10
    0234500067
    1034560500
    2045600671
    0000000089


    输出 #1
    4


    代码

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    bool f[10005][10005]={false};
    int n,m,a[11005][11005],ans=0,st[10005][3];
    const int dx[5]={0,0,0,1,-1};
    const int dy[5]={0,1,-1,0,0}; //四个方向
    void bfs(int i,int j){
    	int head=0,tail=1; //每次head清0,tail清1
    	st[1][1]=i;st[1][2]=j;f[i][j]=1; 
    	ans++;
    	do{ 
    		head++;
    		for(int i=1;i<=4;i++){
    			int x=st[head][1]+dx[i];
    			int y=st[head][2]+dy[i];
    			if(!f[x][y]) //判断有没有用过
    			 if(a[x][y]!=0) //判断是不是细胞数字
    			  if(x>=1&&x<=n&&y>=1&&y<=m){
    			  	tail++;
    			  	st[tail][1]=x;
    			  	st[tail][2]=y;
    			  	f[x][y]=true; //标记
    			  }
    		}
    	}while(head<=tail);
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    	 for(int j=1;j<=m;j++)
    	  scanf("%1d",&a[i][j]);
    	for(int i=1;i<=n;i++)
    	 for(int j=1;j<=m;j++) //一个一个枚举
    	  if(a[i][j]!=0 and !f[i][j])bfs(i,j);
    	printf("%d",ans);
    	return 0;
    } 
    
  • 相关阅读:
    多元线性回归(pandas/scikit-learn)
    hive查询语法
    Python日志记录(Logging)
    python调用C/C++动态链接库和jython
    MacPorts的安装和使用
    python多进程(multiprocessing)
    Z-Score数据标准化处理(python代码)
    皮尔逊相关系数的计算(python代码版)
    参考书籍
    MFC 之ActiveX控件学习
  • 原文地址:https://www.cnblogs.com/luojunhang/p/12300159.html
Copyright © 2011-2022 走看看