問題描述:
一矩陣陣列由數字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;
}