比赛 暑假培训B班二测 评测结果 AAAAAWEA
题目名称 劣质的草 最终得分 75
用户昵称 yuan 运行时间 0.178 s
代码语言 C++ 内存使用 7.96 MiB
提交时间 2012-07-22 17:02:44
显示代码纯文本
#define MAX 1001//字符串替换
#define loop for(i=1;i<=m;i++) for(j=1;j<=n;j++)
#include <fstream>
using namespace std;

int m,n,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;}
	loop fin>>h[i][j];
	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])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();
	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;
}