sách gpt4 ai đã đi

java - 不同起点的八皇后算法

In lại 作者:塔克拉玛干 更新时间:2023-11-03 06:18:41 25 4
mua khóa gpt4 Nike

无论起点如何,我都在努力寻找八皇后问题的解决方案。下面是我的 Solver 类,但是由于某种原因,当我将皇后排成一排而不是第一个时,它不起作用。

import java.util.*; 
public class Queens {
private static int x;
private static int y;
private static ArrayList rows = new ArrayList();
public Queens(int index, int row, int pos) {

for (int i = 0; i
rows.add(i);
rows.remove(row);
x = pos;
y = row;
}

public static boolean solve(int row, int[][] board, int N, int pos) {
board[y][x] = 1;
System.out.println("row: " + row);
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
if(board[i][j]==1) System.out.print("Q ");
else System.out.print("* ");
}
System.out.println();
}
System.out.println();
if(row>=N-1) return true;
for(int position = pos; position < N; position++) {
if(isValid(board, rows.get(row), position, N)) {
board[rows.get(row)][position] = 1;
if(!solve(row+1, board, N, 0)) {
board[rows.get(row)][position] = 0;
} else
trả về giá trị đúng;
}
}
trả về false;
}

public static boolean isValid(int[][] board, int y, int x, int N) {
int i, j;
for(i = 0; i < y; i++)
if(board[i][x]==1)
trả về false;
i = y - 1;
j = x - 1;
while((i>=0)&&(j>=0))
if(board[i--][j--]==1) return false;
i = y - 1;
j = x + 1;
while((i>=0)&&(j<>
if(board[i--][j++]==1) return false;
trả về giá trị đúng;
}
}

例如,当我将初始皇后放在棋盘[2][2]上时,这是我得到的解决方案:

Q * * * * * * * 
* * Q * * * * *
* * Q * * * * *
* * * * * Q * *
* * * * * * * Q
* Q * * * * * *
* * * Q * * * *
* * * * * * Q *

代码有什么问题?为什么它无视最初的作品?提前致谢。

1 Câu trả lời

isValid 中 for 循环的界限是什么?它们是否会阻止您将皇后放置在下面有另一个皇后的列中?

类似的问题也适用于 while 循环——它们能否检测到对角线上有一个皇后,但低于您现在放置的那个?

关于java - 不同起点的八皇后算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37001162/

25 4 0
Bài viết được đề xuất: javascript - 将并排的 Rects 连接到一个大 Rect
Bài viết được đề xuất: swift - 从时间间隔中提取按天分组的日期范围
Bài viết được đề xuất: Thuật toán - được sử dụng để đếm số lần các cặp
Bài viết được đề xuất: c++ - 使用结构/遗传算法
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com