| 比赛 | 暑假培训B班二测 | 评测结果 | AAAAAAEA | 
    | 题目名称 | 劣质的草 | 最终得分 | 87 | 
    | 用户昵称 | 二木子系 | 运行时间 | 0.314 s | 
    | 代码语言 | C++ | 内存使用 | 4.13 MiB | 
    | 提交时间 | 2012-07-22 10:46:28 | 
显示代码纯文本
#include<iostream>
#include<fstream>
using namespace std;
int num[1000][1000]={0},w=1,m,n;
int cao(int x,int y){
	num[x][y]=-w;
	if(y-1>=0&&num[x][y-1]>0)  cao(x,y-1);
	if(y-1>=0&&x-1>=0&&num[x-1][y-1]>0)   cao(x-1,y-1);
	if(x-1>=0&&num[x-1][y]>0)  cao(x-1,y);
	if(y+1<n&&x-1>=0&&num[x-1][y+1]>0)   cao(x-1,y+1);
	if(y+1<n&&num[x][y+1]>0)   cao(x,y+1);
	if(y+1<n&&x+1<m&&num[x+1][y+1]>0)   cao(x+1,y+1);
	if(x+1<m&&num[x+1][y]>0)   cao(x+1,y);
	if(y-1>=0&&x+1<m&&num[x+1][y-1]>0)   cao(x+1,y-1);
}
	
int main(){
	ifstream fin("badgras.in");
	ofstream fout("badgras.out");
	fin>>m>>n;
	for(int a=0;a<m;a++)
		for(int b=0;b<n;b++)
			fin>>num[a][b];
	for(int a=0;a<m;a++)
		for(int b=0;b<n;b++)
			if(num[a][b]>0){
				cao(a,b);
				w++;}
	fout<<w-1;
	return 0;
}