百炼-2815-城堡问题-C语言-递归算法

本文探讨了一种解决城堡问题的直观方法,虽然原始思路可行,但通过位运算可以显著优化代码。利用位运算和临时变量以及占用状态记录数组,可以简洁高效地实现递归算法。
摘要由CSDN通过智能技术生成

首先是一种比较直观的解法,虽然原理没问题,但实现的就不是很有技巧了。

/*************************************************
**文件名:百炼-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 = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值