先遍历地图 发现水池就深搜,把它旁边的水池全部标记,同时水池的数目+1
很简单。不过要记得这个是上下左右四个方向。。不是八个方向0.0
 
#include <stdio.h>
#include <string.h>
int t,m,n,i,j,count;
int visit[100][100],a[100][100];
void dfs(int s1,int s2)
{
	if(s1<0||s1==m||s2<0||s2==n||visit[s1][s2]||!a[s1][s2])
		return ;
	visit[s1][s2]=1;
	dfs(s1+1,s2);
	dfs(s1-1,s2);
	dfs(s1,s2-1);
	dfs(s1,s2+1);
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d %d",&m,&n);
		memset(a,0,sizeof(a));
		memset(visit,0,sizeof(visit));
		for(i=0;i<m;i++)
			for(j=0;j<n;j++)
				scanf("%d",&a[i][j]);
		count=0;
		for(i=0;i<m;i++)
			for(j=0;j<n;j++)
			{
				if(a[i][j]==1&&visit[i][j]==0)
					count++,dfs(i,j);
			}
		printf("%d\n",count);
	}
}        版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/su20145104009/article/details/47185351