細胞問題

問題描述:
一矩陣陣列由數字0到9組成,數字1到9代表細胞,細胞的定義爲沿細胞數字上下左右還是細胞數字則爲同一細胞,求給定矩陣陣列的細胞個數。如:
陣列
4 10
0234500067
1034560500
2045600671
0000000089
有四個細胞

完整程序:

#include<bits/stdc++.h>
using namespace std;
//廣搜細胞問題
int dx[4]={-1,0,1,0};//x,y方向的增量
int dy[4]={0,1,0,-1};
int bz[100][100],num=0,n,m;//二維數組,存儲原始矩陣
struct Point{
    int row,col;
};
void doit(int p,int q){//p,q爲矩陣的行列號
int x,y,i;
queue<Point>h;
num++;//細胞個數增一
bz[p][q]=0;//細胞個數清零
struct Point site,nextsite;
site.row=p;
site.col=q;
h.push(site);
while(!h.empty()){
        int w=1;
    site=h.front();
    h.pop();
    for(i=0;i<=3;i++){//沿細胞的上下左右四個方向搜索細胞
        nextsite.row=site.row+dx[i];
        nextsite.col=site.col+dy[i];
        if((nextsite.row>=0)&&(nextsite.row<m)&&(nextsite.col>=0)&&(nextsite.col<n)&&(bz[nextsite.row][nextsite.col])){
            w++;
            h.push(nextsite);
            bz[nextsite.row][nextsite.col]=0;
        }
    }
}
}
int main(){
   int i,j;
   char s[100],ch;
   scanf("%d%d\n",&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-1;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);//在矩陣中尋找細胞
   printf("NUMBER OF CELLS =%d",num);
   return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章