hdu 1312

恩,直接DFS,还好,不算很慢

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char map[21][21];
int n,m,cnt;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int si,int sj)
{
	for(int k=0;k<4;k++)
	{
		int i=si+dir[k][0];
		int j=sj+dir[k][1];
		if(i>0&&i<=m&&j>0&&j<=n&&map[i][j]!='#')
		{
			map[i][j]='#';
			cnt++;
			dfs(i,j);
			//cout<<i<<' '<<j<<endl;
		}
	}
	return ;
}
int main()
{
	int s1,s2;
	while(cin>>n>>m&&(n||m))
	{
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cin>>map[i][j];
				if(map[i][j]=='@')
				{s1=i;s2=j;}
			}
		}
		map[s1][s2]='#';
		cnt=1;
		dfs(s1,s2);
		cout<<cnt<<endl;
	}
	return 0;
}
posted @ 2011-08-01 15:28  枕边梦  阅读(192)  评论(0编辑  收藏  举报