You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

八皇后挑战:递归检查棋盘对角线冲突的布尔函数问题

八皇后对角线递归检查问题修复

原代码存在的问题

  • 语法错误:递归返回语句末尾多了一个右括号,diaCheck(r+1, c+1)) 需改为 diaCheck(r+1, c+1)
  • 逻辑错误:若当前位置(r,c)是刚放置的皇后(值为1),函数会直接返回false,误判为冲突
  • 递归冗余:四个方向同时递归会重复遍历大量位置,且会重复检查同一对角线上的格子

修复后的代码

//pre: r & c within bounds of board
//post: returns true if no queens are diagonally challenging
public boolean diaCheck(int r, int c){
    // 跳过当前放置皇后的位置,只检查四个对角线方向的其他格子
    if(board[r][c] == 1) {
        return checkDiagonal(r-1, c-1, -1, -1) &&
               checkDiagonal(r-1, c+1, -1, 1) &&
               checkDiagonal(r+1, c-1, 1, -1) &&
               checkDiagonal(r+1, c+1, 1, 1);
    }
    return false;
}

// 辅助函数:沿指定方向(dr行增量,dc列增量)检查对角线
private boolean checkDiagonal(int r, int c, int dr, int dc) {
    // 出界则该方向无冲突
    if(r < 0 || r >= board.length || c < 0 || c >= board.length) {
        return true;
    }
    // 遇到皇后则存在冲突
    if(board[r][c] == 1) {
        return false;
    }
    // 沿当前方向继续递归检查
    return checkDiagonal(r + dr, c + dc, dr, dc);
}

修复说明

  1. 拆分递归逻辑:用辅助函数单独处理每个对角线方向,避免重复遍历,逻辑更清晰
  2. 排除当前位置:跳过刚放置皇后的位置,只检查四个对角线方向的其他格子,避免误判
  3. 语法修正:移除多余的右括号,保证代码可编译
  4. 定向递归:每个辅助函数只沿一个固定方向(如左上:行-1、列-1)递归,直到出界或找到皇后,消除交叉递归的冗余

内容的提问来源于stack exchange,提问作者John McDonald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:23:10