比赛 20121016 评测结果 C
题目名称 家族 最终得分 0
用户昵称 Cloud 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-10-16 20:41:06
显示代码纯文本
#include<fstream>
#include<string>
#include<queue>
using namespace std;
struct yu
{
	int x,y;
};
queue<yu> dq;
yu tmp;
int f[102][202];
char st[200];
int num[101];
int main(void)
{
	ifstream fin("family.in");
	ofstream fout("family.out");
	int n;
	fin>>n;
	int i,j;
	fin.getline(st,200);
	for(i=1;i<=n;i++)
	{
		fin.getline(st,200);
		num[i]=strlen(st);
		for(j=1;j<num[i];j++)
			if(st[j-1]=='*'||st[j-1]==' ')
				f[i][j]=-1;
	}
	int sum=0;
	for(i=1;i<=n;i++)
		for(j=1;j<=num[i];j++)
		{
			if(!f[i][j])
			{
				tmp.x=i;
				tmp.y=j;
				dq.push(tmp);
				f[i][j]=1;
				sum++;
				while(dq.size())
				{
					tmp=dq.front();
					if(tmp.x-1&&!f[tmp.x-1][tmp.y])
					{
						tmp.x--;
						f[tmp.x][tmp.y]=1;
						dq.push(tmp);
					}
					tmp=dq.front();
					if(tmp.y-1&&!f[tmp.x][tmp.y-1])
					{
						tmp.y--;
						f[tmp.x][tmp.y]=1;
						dq.push(tmp);
					}
					tmp=dq.front();
					if(tmp.x+1<=n&&!f[tmp.x+1][tmp.y])
					{
						tmp.x++;
						f[tmp.x][tmp.y]=1;
						dq.push(tmp);
					}
					tmp=dq.front();
					if(tmp.y+1<=num[i]&&!f[tmp.x][tmp.y+1])
					{
						tmp.y++;
						f[tmp.x][tmp.y]=1;
						dq.push(tmp);
					}
					dq.pop();
				}
			}
		}
	fout<<sum;
	fin.close();
	fout.close();
	return 0;
}