比赛 |
暑假培训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;
}