首先是一种比较直观的解法,虽然原理没问题,但实现的就不是很有技巧了。
/*************************************************
**文件名:百炼-2815
**Copyright (c) 2015-2025 OrdinaryCrazy
**创建人:OrdinaryCrazy
**日期:20170807
**描述:百炼-2815参考答案
**版本:1.0
**************************************************/
#include <stdio.h>
struct block
{
int east,west,north,south,flag;
}blocks[50][50];
int r,c,room,maxa;
/*************************************************
**函数名:room_count
**输入:i-方块纵坐标,j-方块横坐标
**输出:如果尚未占用,返回方块所在房间的面积
**功能:计算方块所在房间面积
**创建人:OrdinaryCrazy
**日期:20170807
**版本:1.0
**************************************************/
int room_count(int i,int j)
{
blocks[i][j].flag = 0;
int area = 1;
if(blocks[i][j].east && blocks[i][j + 1].flag)
{
blocks[i][j].east = blocks[i][j + 1].west = 0;
area += room_count(i,j + 1);
}
if(blocks[i][j].west && blocks[i][j - 1].flag)
{
blocks[i][j].west = blocks[i][j - 1].east = 0;
area += room_count(i,j - 1);
}
if(blocks[i][j].north && blocks[i - 1][j].flag)
{
blocks[i][j].north = blocks[i - 1][j].south =