比赛 20121016 评测结果 WWAWWWWWWW
题目名称 家族 最终得分 10
用户昵称 QhelDIV 运行时间 0.006 s
代码语言 C++ 内存使用 3.44 MiB
提交时间 2012-10-16 20:51:50
显示代码纯文本
#include <fstream>
using namespace std;
ifstream fin("family.in");
ofstream fout("family.out");
string S[401];
int N,Index;
bool flag[400][400];
const int Rx[5]={0,0,1,0,-1},Ry[5]={0,-1,0,1,0};
class QUEUE
{
public:
	int X[400],Y[400],head,tail;
	void Init(int Px,int Py)
	{
		head=1;tail=2;
		X[head]=Px;Y[head]=Py;
	}
}Q;
void Initialize()
{
int i;char Ch;
	fin>>N;
	Ch=fin.get();
	for(i=1;i<=N;i++)
	{
		Ch=fin.get();
		while(Ch!='\r' && Ch!='\n' && !fin.eof())
		{
			S[i].push_back(Ch);
			Ch=fin.get();
		}
	}
}

void BFS(int Py,int Px)
{
int j;
	Q.Init(Px,Py);
	for(;Q.head<Q.tail;)
	{
		for(j=1;j<=4;j++)
		{
		int Tx=Q.X[Q.head]+Rx[j],Ty=Q.Y[Q.head]+Ry[j];
			if(flag[Ty][Tx])
			{
				flag[Ty][Tx]=false;
				Q.X[Q.tail]=Tx;
				Q.Y[Q.tail]=Ty;
				Q.tail++;
			}
		}
		Q.head++;
	}
}

int main()
{
	Initialize();
	
	for(int i=1;i<=N;i++)
	{
	int L=S[i].length();
		for(int j=0;j<L;j++)
			if(S[i][j]!='*' && S[i][j]!=' ')
				flag[i][j]=true;
	}
	for(int i=1;i<=N;i++)
	{
	int L=S[i].length();
		for(int j=0;j<L;j++)
			if(flag[i][j])
			{
				Index++;
				flag[i][j]=false;
				BFS(i,j);
			}
	}
	fout<<Index<<endl;
	fin.close();
	fout.close();
	return 0;
}