572 - Oil Deposits

/*
简单连通图问题,采用深度优先搜索即可
题意:油矿之间存在联系(行,列,或对角线相连),则属于一块。
输出图中共存在多少油矿
*/

#include <cstdio>
#include <cstring>

int m,n;
char G[105][105];
int count;
void dfs(int r,int c)
{
	if(G[r][c]=='@')
	{
		G[r][c]='*';
		//这里使用有技巧,排版整齐,容易查错!
		dfs(r-1,c-1);dfs(r-1,c);dfs(r-1,c+1);
		dfs(r,c-1);				dfs(r,c+1);
		dfs(r+1,c-1);dfs(r+1,c);dfs(r+1,c+1);
	}
}

int main()
{
	//freopen("data.in","r",stdin);
	while(scanf("%d %d",&m,&n)==2)
	{
		if(m==0)
			break;
		count=0;
		memset(G,0,sizeof(G));
		for(int i=1;i<=m;i++)
		{
			getchar();
			for(int j=1;j<=n;j++)
				G[i][j]=getchar();
		}
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(G[i][j]=='@')
				{
					count++;
					dfs(i,j);
				}
			}
		}
		printf("%d\n",count);
	}
	return 0;
}


你可能感兴趣的:(c)