比赛 20121016 评测结果 AWWWAWWWWA
题目名称 家族 最终得分 30
用户昵称 Truth.Cirno 运行时间 0.075 s
代码语言 C++ 内存使用 3.16 MiB
提交时间 2012-10-16 20:15:34
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const short RUL[4][2]={{0,1},{0,-1},{1,0},{-1,0}};

int n,total;
string map[300];

void bfs(int x,int y)
{
	int i,tail=0,head=0,que[200000][2]={0};
	total++;
	map[x][y]='*';
	que[0][0]=x;
	que[0][1]=y;
	while (head>=tail)
	{
		for (i=0;i<4;i++)
		{
			x=RUL[i][0]+que[tail][0];
			y=RUL[i][1]+que[tail][1];
			if (x>=1&&x<=n&&y>=1&&y<map[x].length())
			{
				if (map[x][y]!='*'&&map[x][y]!=' '&&map[x][y]!='\0')
				{
					map[x][y]='*';
					head++;
					que[head][0]=x;
					que[head][1]=y;
				}
			}
		}
		tail++;
	}
	
}

int main(void)
{
	freopen("family.in","r",stdin);
	freopen("family.out","w",stdout);
	int i,j;
	scanf("%d\n",&n);
	for (i=1;i<=n;i++)
	{
		getline(cin,map[i]);
		map[i]="*"+map[i];
	}
	for (i=1;i<=n;i++)
	{
		for (j=1;j<map[i].length();j++)
			if (map[i][j]!='*'&&map[i][j]!=' '&&map[i][j]!='\0')
				bfs(i,j);
	}
	cout<<total<<endl;
	return(0);
}