杭电 1312 Red and Black

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int n,m;

int hash[30][30];

char map[30][30];

void DFS(int x,int y)

{

	if(x>n||y>m||hash[x][y]||map[x][y]=='#')

		return;

	hash[x][y]=1;

	DFS(x-1,y);

	DFS(x+1,y);

	DFS(x,y-1);

	DFS(x,y+1);

}

int main()

{

	while(scanf("%d%d%*c",&m,&n),n||m)//注意m,n的顺序,且要加%*c否则出错因为后面接下来的是字符输入,如果不加回车将会以字符读入。

	{

		int x,y;

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

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

		{

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

			{

				map[i][j]='#';

			}

		}//注意初始化

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

		{

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

			

			{

				scanf("%c",&map[i][j]);

				if(map[i][j]=='@')

				{

					x=i;

					y=j;

				}

			}

			getchar();//注意加getchar()否则会将空行当字符输入。

		}

		DFS(x,y);

		int sum=0;

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

		{

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

			{

				if(hash[i][j])

				{

					sum++;

				}

			}

		}

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

	}

	//system("pause");

	return 0;

}

  

你可能感兴趣的:(杭电)