一本通 第二部分 基础算法 第八章 广度优先搜索算1329 【例8.2】细胞

1329:【例8.2】细胞

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 2805 通过数: 1550
【题目描述】
一矩形阵列由数字00到99组成,数字11到99代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:

阵列

4 10
0234500067
1034560500
2045600671
0000000089
有44个细胞。

【输入】
第一行为矩阵的行nn和列mm;

下面为一个n×mn×m的矩阵。

【输出】
细胞个数。

【输入样例】
4 10
0234500067
1034560500
2045600671
0000000089
【输出样例】
4

 #include
    #include
    #include
    using namespace std;
    bool a[1001][1001];
    int qi[100001],qj[100001];
    int dis[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    int main()
    {
    	int n,m,ans=0;
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    		{
    			string s;
    			cin>>s;
    			stringstream input(s);
    			int j=0;
    			char x;
    			while(input>>x)
    			{
    				j++;
    				if(x-'0'!=0)
    					a[i][j]=true;
    			}
    		}
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			if(a[i][j])
    			{
    				ans++;
    				int head=0,tail=1;
    				qi[0]=i;
    				qj[0]=j;
    				while(head!=tail)
    				{
    					int x=qi[head];
    					int y=qj[head];
    					a[x][y]=false;
    					head++;
    					for(int i=0;i<4;i++)
    					{
    						int nx=x+dis[i][0];
    						int ny=y+dis[i][1];
    						if(a[nx][ny])
    						{
    							qi[tail]=nx;
    							qj[tail]=ny;
    							tail++;
    						}
    					}
    				}
    			}
    		}
    	}
    	cout<<ans;
    	return 0;
    }

你可能感兴趣的:(一本通代码)