记录编号 |
41423 |
评测结果 |
AAAAAAAA |
题目名称 |
劣质的草 |
最终得分 |
100 |
用户昵称 |
yuan |
是否通过 |
通过 |
代码语言 |
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;
}