当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
alive.c 1.30 KB
一键复制 编辑 原始数据 按行查看 历史
冷钦街 提交于 2018-09-29 21:48 . 更简单的围棋实现C语言版本
#include "chess.h"
#include <string.h>
//只有遇到空白的时候才算有气,其它时候都算无气
//所以递归的停止条件之一是跑到空白交叉点
BOOL isLastAlive(int row, int col, int role, int *footprint)
{
if (!validPos(row,col))
return FALSE; //棋盘边界之外,还没有找到空格,自然无气
if (footprint[row * ROWS + col] == 1)
return FALSE; //如果这个棋子位置已经递归处理过,则停止递归,防止循环递归
footprint[row * ROWS + col] = 1; //记录脚印,用于避免循环递归
if (chessData[row][col] == EMPTY)
return TRUE; //找到空白位置了,我们活了,哈哈哈
if (chessData[row][col] != role)
return FALSE; //报告,敌军堵住了去路
//同色棋子
return isLastAlive(row-1,col,role,footprint) //看看上方是否有活口
|| isLastAlive(row+1,col,role,footprint) //看看下方是否有活口
|| isLastAlive(row,col-1,role,footprint) //看看左方是否有活口
|| isLastAlive(row,col+1,role,footprint); //看看右方是否有活口
}
BOOL isAlive(int row,int col, enum chessType role)
{
int footprint[ROWS * COLS];
memset(footprint, 0, sizeof(footprint)); //初始化脚印数据,用于防止循环递归
return isLastAlive(row, col, role, footprint);
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化