gpt4 book ai didi

Java 4 皇后修改

转载 作者:行者123 更新时间:2023-11-29 05:44:47 26 4
gpt4 key购买 nike

请注意:我被要求以任何我喜欢的方式修改 NQueens 问题。我想到了这种方式,并想实现它。这不是一个直接的家庭作业问题,而是我如何实现自己的修改的问题。

我在下面写了一个代码来求解 4 个皇后区。所以根据这个代码,没有两个皇后可以在同一行,同一列和同一对角线,从而不攻击。我正在尝试修改它,如果我放置一个皇后,那么它可以放在同一列中但跳过两行,它可以放在同一行中跳过两列,同样它可以放在同一对角线中跳过两列行和两列。

所以基本上,简单来说,皇后可以放在同一行、同一列和同一对角线上,跳过两个 block 。

对于 4 个皇后输出目前看起来是这样的:

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

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

但是也应该给出以下输出:

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

所以在这里,女王被放置在水平、垂直和对角线每两个 block 之后。

代码:

import java.util.*;

public class Queens {

/***************************************…
* Return true if queen placement q[n] does not conflict with
* other queens q[0] through q[n-1]
****************************************/
public static boolean isConsistent(int[] q, int n) {
for (int i = 0; i < n; i++) {
if (q[i] == q[n]) return false; // same column
if ((q[i] - q[n]) == (n - i)) return false; // same major diagonal
if ((q[n] - q[i]) == (n - i)) return false; // same minor diagonal
}
return true;
}

/***************************************…
* Print out N-by-N placement of queens from permutation q in ASCII.
****************************************/
public static void printQueens(int[] q) {
int N = q.length;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (q[i] == j) System.out.print("Q ");
else System.out.print("* ");
}
System.out.println();
}
System.out.println();
}


/***************************************…
* Try all permutations using backtracking
****************************************/
public static void enumerate(int N) {
int[] a = new int[N];
enumerate(a, 0);
}

public static void enumerate(int[] q, int n) {
int N = q.length;
if (n == N) printQueens(q);
else {
for (int i = 0; i < N; i++) {
q[n] = i;
if (isConsistent(q, n)) enumerate(q, n+1);
}
}
}


public static void main(String[] args) {

enumerate(4);
}

}

我做错了什么?如何更改我的代码以使其适用于修改?

最佳答案

这在你的模型中是不可能的。
在你的模型中有下一个坐标:

Oy = q[Ox];  

结果

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

数组应该在同一个位置有两个值

q[0] == 0  
q[0] == 3
q[3] == 0
q[3] == 3

在一维数组中是不可能的。你应该改变模型和算法

关于Java 4 皇后修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com