1. 程式人生 > >nyoj 27水池數目

nyoj 27水池數目

水池數目

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4
描述
南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。
輸入
第一行輸入一個整數N,表示共有N組測試資料
每一組資料都是先輸入該地圖的行數m(0<m<100)與列數n(0<n<100),然後,輸入接下來的m行每行輸入n個數,表示此處有水還是沒水(1表示此處是水池,0表示此處是地面)
輸出
輸出該地圖中水池的個數。
要注意,每個水池的旁邊(上下左右四個位置)如果還是水池的話的話,它們可以看做是同一個水池。
樣例輸入
2
3 4
1 0 0 0 
0 0 1 1
1 1 1 0
5 5
1 1 1 1 0
0 0 1 0 1
0 0 0 0 0
1 1 1 0 0
0 0 1 1 1
樣例輸出
2
3
#include<stdio.h>
#include<iostream>
using namespace std;
int n,m;
char  pos[110][110];
void fun(int x,int y)
{
	if(x<n&&x>=0&&y<m&&y>=0&&pos[x][y]=='1')
	{
	pos[x][y]= '0';
	fun(x-1,y);
	fun(x+1,y);
	fun(x,y-1);
	fun(x,y+1);
	}
	return ;
}
int main()
{
	int N,i,j;
	cin>>N;
	while(N--)
	{
		scanf("%d%d",&n,&m);
	
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
			{
				cin>>pos[i][j];
			}
			int ans=0;
		 for(i=0;i<n;i++)
			for(j=0;j<m;j++)
		{
			if(pos[i][j]=='1')
			{
			fun(i,j);
			ans++;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}