记录编号 41423 评测结果 AAAAAAAA
题目名称 劣质的草 最终得分 100
用户昵称 Gravataryuan 是否通过 通过
代码语言 C++ 运行时间 0.072 s
提交时间 2012-07-22 20:01:19 内存使用 4.13 MiB
显示代码纯文本
#define MAX 1001//字符串替换
#define loop for(i=1;i<=m;i++) for(j=1;j<=n;j++)
#include <fstream>
using namespace std;

short m,n,zero,f[MAX][MAX],h[MAX][MAX];
//f[][]每个小房间填充的颜色变量;
//岛屿个数应该和颜色种类一致;
ifstream fin("badgras.in");
ofstream fout("badgras.out");

int init()//初始化
{
	int i,j,k,w;
	for(i=0;i<MAX;i++)
		for(j=0;j<MAX;j++){ h[i][j]=0;f[i][j]=0; }
	zero=1;//如果输入数据没有一个0,说明该草场连成一片,直接输出1
	loop
	{
		fin>>h[i][j];
		if(h[i][j]==0)zero=0;
	}
	return 0;
}

int flood_fill(int i,int j,int newcolor)//用颜色c填充单位(i,j)
{
	if(h[i][j]>0)//如果单位i,j尚未不是优质草
	{
		f[i][j]=newcolor;//填入颜色
		if(j-1>=1&&!f[i][j-1])flood_fill(i,j-1,newcolor);//W
		if(j-1>=1&&i-1>=1&&!f[i-1][j-1])flood_fill(i-1,j-1,newcolor);//W_N
		if(i-1>=1&&!f[i-1][j])flood_fill(i-1,j,newcolor);//N
		if(j+1<=n&&i-1>=1&&!f[i-1][j+1])flood_fill(i-1,j+1,newcolor);//E_N
		if(j+1<=n&&!f[i][j+1])flood_fill(i,j+1,newcolor);//E
		if(j+1<=n&&i+1<=m&&!f[i+1][j+1])flood_fill(i+1,j+1,newcolor);//E_S
		if(i+1>=1&&!f[i+1][j])flood_fill(i+1,j,newcolor);//S
		if(j-1>=1&&i+1<=m&&!f[i+1][j-1])flood_fill(i+1,j-1,newcolor);//W_S
	}
	return 0;
}

int main()
{
	int i,j,color=0;
	fin>>m>>n;//读入房间列数和行数m行n列
	init();
	if(zero)//如果没有0数据
		color=1;
	else
	{
		color=0;//准备颜色
		loop
		{
			if(h[i][j]>0&&f[i][j]==0)
			{
				color++;//换一种颜色
				flood_fill(i,j,color);
			}
		}
	}
	fout<<color<<endl;//房间数量和颜色种类一致
	fin.close();
	fout.close();
	return 0;
}