记录编号 284755 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [入门经典] 黑白图像 最终得分 100
用户昵称 Gravatar@@@ 是否通过 通过
代码语言 C++ 运行时间 0.306 s
提交时间 2016-07-19 20:07:43 内存使用 2.52 MiB
显示代码纯文本
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("common.in");
ofstream cout("common.out");
bool e[701][701];
int n,newcolor=0,book[701][701],t[9][3]={{0,0,0},{0,-1,0},{0,-1,1},{0,0,1},{0,1,1},{0,1,0},{0,1,-1},{0,0,-1},{0,-1,-1}};
struct point
{
	int x,y;
	point(int _x,int _y)
	{
		this->x=_x;
		this->y=_y;
	}
};
queue<point> q;
int bfs(int start_x,int start_y)
{
	newcolor++;
	point a(start_x,start_y);
	q.push(a);
	book[a.x][a.y]=newcolor;
	while(!q.empty())
	{
		point h=q.front();
		q.pop();
		for(int k=1;k<=8;k++)
		{
			point r(h.x+t[k][1],h.y+t[k][2]);
			if(r.x>=1&&r.x<=n&&r.y>=1&&r.y<=n)
				if(book[r.x][r.y]==0)
					if(e[r.x][r.y])
						q.push(r),book[r.x][r.y]=newcolor;
		}
	}
	return 0;
}
int main()
{
	int i,j;
	char c;
	cin>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			cin>>c,e[i][j]=c-'0';
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(e[i][j]&&book[i][j]==0)
				bfs(i,j);
	cout<<newcolor<<endl;
	cin.close();	
	cout.close();		
	return 0;
}