杭电 1241 Oil Deposits

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int n,m;

int hash[105][105];

char map[105][105];

int isok(int i,int j)

{

	if(i>=0&&i<n&&j>=0&&j<m&&map[i][j]=='@'&&!hash[i][j])

		return 1;

	return 0;

}

void DFS(int x,int y)

{

	hash[x][y]=1;

	if(isok(x-1,y))

	{

		DFS(x-1,y);

	}

	if(isok(x-1,y-1))

	{

		DFS(x-1,y-1);

	}

	if(isok(x-1,y+1))

	{

		DFS(x-1,y+1);

	}

	if(isok(x,y-1))

	{

		DFS(x,y-1);

	}

	if(isok(x,y+1))

	{

		DFS(x,y+1);

	}

	if(isok(x+1,y-1))

	{

		DFS(x+1,y-1);

	}

	if(isok(x+1,y))

	{

		DFS(x+1,y);

	}

	if(isok(x+1,y+1))

	{

		DFS(x+1,y+1);

	}

}

int main()

{

	while(scanf("%d%d",&n,&m),n|m)

	{

		int sum=0;

		memset(hash,0,sizeof(hash));

		for(int i=0;i<105;i++)

		{

			for(int j=0;j<105;j++)

			{

				map[i][j]=-1;

			}

		}

		for(int i=0;i<n;i++)

		{

			scanf("%s",map[i]);

		}

		for(int i=0;i<n;i++)

		{

			for(int j=0;j<m;j++)

			{

				if(isok(i,j))

				{

					sum++;

					DFS(i,j);

				}

			}

		}

		printf("%d\n",sum);

	}

	//system("pause");

	return 0;

}

  

你可能感兴趣的:(OS)