代码拉取完成,页面将自动刷新
#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);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。