作者热门文章
- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
本问题为 N 皇后问题,可采用回溯法(排列树)解决。
package com.platform.modules.alg.alglib.had2553;
public class Hdu2553 {
private final int M = 105;
// n表示n个皇后
private int n;
// x[i]表示第i个皇后放置在第i行第x[i]列
int x[];
// count 表示 n 皇后问题可行解的个数
long count;
public String output = "";
public String cal(String input) {
String[] line = input.split("\n");
for (int i = 0; i < line.length; i++) {
x = new int[M];
n = Integer.parseInt(line[i]);
if (n == 0) {
break;
}
count = 0;
Backtrack(1);
output += count + "\n";
}
return output;
}
// 判断第 t 个皇后能否放置在第 i 个位置
boolean Place(int t) {
boolean ok = true;
for (int j = 1; j < t; j++) //判断该位置的皇后是否与前面t-1个已经放置的皇后冲突
{
// 判断列、对角线是否冲突
if (x[t] == x[j] || t - j == Math.abs(x[t] - x[j])) {
ok = false;
break;
}
}
return ok;
}
void Backtrack(int t) {
// 如果当前位置为 n,则表示已经找到了问题的一个解
if (t > n) {
count++;
} else
// 分别判断 n 个分支,特别注意 i 不要定义为全局变量,否则递归调用有问题
for (int i = 1; i <= n; i++) {
x[t] = i;
if (Place(t))
Backtrack(t + 1); // 如果不冲突的话进行下一行的搜索
}
}
}
最初的 N-Queen 问题是关于在 N*N 棋盘上放置 N 个皇后。 然而,我却被一位学界 friend 质疑: 有预定义皇后的 N 皇后问题的 NP 完备性证明吗? 定义是: 假设: N = 8,
我正在尝试解决 N 皇后问题。您可以在 https://leetcode.com/problems/n-queens/ 中找到问题. 对于回溯,我了解到我们可以用三个关键来解决问题: 做出选择 约束
我正在用 Java 制作国际象棋游戏。 我做了一个 JFrame,它可以让我创建棋子,这就是为什么我对任何棋子都有所有可能的走法(并且我将制作比正常国际象棋中更多的棋子)。 但是我有一个小问题,我已经
我编写了一个 N-Queens 难题的 Java 小算法(使用 c*c 棋盘)。您将在下面找到我的递归方法的代码。 它没有找到所有的解决方案。 我的功能是什么 这个想法是在主方法中第一次调用我的函数,
我写了两个程序: 通过回溯算法在没有任何威胁的情况下将 n 个皇后放在棋盘上。但这对于 big n 来说非常沉重。最后你可以运行 100 个皇后。 在没有任何爬山算法威胁的情况下,将 n 个皇后放在棋
我是一名优秀的程序员,十分优秀!