Java 8个皇后不使用回溯方法

Java 8个皇后不使用回溯方法,java,n-queens,Java,N Queens,我正在做一个版本的8皇后问题,但没有使用回溯方法。对于其中一种方法,我必须“给正方形打分”,基本上我需要找到如果盒子里有一个皇后的话,将变得不可用的单元格数量。我的问题是,我无法让我的代码返回平方的分数。我的for循环有什么问题吗 import java.util.ArrayList; public class Chessboard { private int[][] board; public static final int QUEEN = -2; public static fi

我正在做一个版本的8皇后问题,但没有使用回溯方法。对于其中一种方法,我必须“给正方形打分”,基本上我需要找到如果盒子里有一个皇后的话,将变得不可用的单元格数量。我的问题是,我无法让我的代码返回平方的分数。我的for循环有什么问题吗

import java.util.ArrayList;

    public class Chessboard {
private int[][] board;
public static final int QUEEN = -2;
public static final int SQUIGGLE = -1;

/**
 * constructor initializes board to be of size n-by-n and containing all
 * zeros
 */
public Chessboard(int n) {
    board = new int[n][n];

}

/**
 * returns the board
 */
public int[][] getBoard() {
    return board;

}
/**
 * returns SQUIGGLE if square at row, col contains SQUIGGLE returns QUEEN if
 * square at row, col contains QUEEN otherwise, counts the number of squares
 * that would become unavailable if the square at row, col were to receive a
 * queen; this count is returned
 */
public int scoreSquare(int row, int col) {

    if (board[row][col] == -1) {
        return SQUIGGLE;
    } else if (board[row][col] == -2) {
        return QUEEN;
    }

    else {
        int countsquare = 1;
        for (int r = 0; r < board[col].length; r++) {
            countsquare++;
        }
        for (int c = 0; c < board[row].length; c++) {
            countsquare++;
        }

        for (int r = row + 1, c = col + 1; r < board.length
                && c < board.length; r++, c++) {
            countsquare++;
        }
        for (int r = row + 1, c = col - 1; r < board.length && c < 0; r++, c--) {
            countsquare++;
        }
        for (int r = row - 1, c = col + 1; r < 0 && c < board.length; r--, c++) {
            countsquare++;
        }
        for (int r = row - 1, c = col - 1; r < 0 && c < 0; r--, c--) {
            countsquare++;
        }
        return countsquare;
    }

}
import java.util.ArrayList;
公共类棋盘{
私人int[]董事会;
公共静态最终整数=-2;
公共静态最终int-SQUIGGLE=-1;
/**
*构造器将电路板初始化为n×n大小,并包含所有
*零
*/
公共棋盘(int n){
board=新的整数[n][n];
}
/**
*返回董事会
*/
public int[]getBoard(){
返回板;
}
/**
*如果行为正方形,则返回SQUIGGLE;如果列包含SQUIGGLE,则返回QUEEN
*第行为正方形,列中包含皇后,否则,计算正方形数
*如果row,col的正方形收到
*女王,伯爵回来了
*/
公共整数分数平方(整数行,整数列){
如果(线路板[行][列]=-1){
返回蠕动;
}else if(板[行][col]=-2){
回归女王;
}
否则{
int countsquare=1;
对于(int r=0;r
在将
r
c
与零进行比较的每个循环中,您需要使用
=
而不是
=0
,而不是
c<0

for (int r = row + 1, c = col - 1; r < board.length && c < 0; r++, c--) {
for(int r=row+1,c=col-1;r
这是因为你要倒计时到零,所以当你的计数器高于零时,你要继续计数

最后,虽然它不应该影响结果,但您并不真正需要前两个循环,因为它们中的每一个都应该导致添加
n
(即
board.length
,即任何行或列的大小)