| 比赛 | 
    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);
}