作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我自己解决了 N 皇后问题,并采用了解决方案中以及在线提到的不同方法。
我的代码适用于最多 4 个输入,但开始打印 4 个之后的任何值的每个案例(即使是错误的)。我已经检查了很多次,但我无法在其中找到任何错误代码。
PFA 代码并查看是否可以找到错误。谢谢!
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scn = new Scanner(System.in);
int n= scn.nextInt();
int[][] arr = new int[n][n];
printNQueens(arr,"",0);
System.out.println();
}
public static void printNQueens(int[][] chess, String qsf, int row) {
if(row==chess.length)
{
qsf = qsf + ".";
System.out.println(qsf);
return;
}
for(int j=0;j<chess[0].length;j++)
{
if(chess[row][j]==0)
{
int x=row,y=j;
while(x<chess.length)
{
chess[x][y] = 1;
x++;
}
x = row;
while(x<chess.length && y>=0)
{
chess[x][y] = 1;
x++;
y--;
}
x = row;
y = j;
while(x<chess.length && y<chess[0].length)
{
chess[x][y] = 1;
x++;
y++;
}
printNQueens(chess,qsf + row + "-" + j + ", ",row+1);
x = row;
y = j;
while(x<chess.length)
{
chess[x][y] = 0;
x++;
}
x = row;
while(x<chess.length && y>=0)
{
chess[x][y] = 0;
x++;
y--;
}
x = row;
y = j;
while(x<chess.length && y<chess[0].length)
{
chess[x][y] = 0;
x++;
y++;
}
}
}
}
}
最佳答案
import java.io.*;
导入java.util.*;
公共(public)类主要{
public static void main(String[] args) throws Exception {
Scanner scn = new Scanner(System.in);
int n= scn.nextInt();
int[][] arr = new int[n][n];
printNQueens(arr,"",0);
System.out.println();
}
public static void printNQueens(int[][] chess, String qsf, int row) {
if(row==chess.length)
{
qsf = qsf + ".";
System.out.println(qsf);
return;
}
for(int j=0;j<chess[0].length;j++)
{
if(chess[row][j]==0)
{
chess[row][j] = 1;
ArrayList<Integer> ro = new ArrayList<>();
ArrayList<Integer> co = new ArrayList<>();
int x=row+1,y=j;
while(x<chess.length)
{
if(chess[x][y]==1)
{
ro.add(x);
co.add(y);
}
chess[x][y] = 1;
x++;
}
x = row+1;
y = j - 1;
while(x<chess.length && y>=0)
{
if(chess[x][y]==1)
{
ro.add(x);
co.add(y);
}
chess[x][y] = 1;
x++;
y--;
}
x = row+1;
y = j+1;
while(x<chess.length && y<chess[0].length)
{
if(chess[x][y]==1)
{
ro.add(x);
co.add(y);
}
chess[x][y] = 1;
x++;
y++;
}
printNQueens(chess,qsf + row + "-" + j + ", ",row+1);
x = row;
y = j;
while(x<chess.length)
{
chess[x][y] = 0;
x++;
}
x = row;
while(x<chess.length && y>=0)
{
chess[x][y] = 0;
x++;
y--;
}
x = row;
y = j;
while(x<chess.length && y<chess[0].length)
{
chess[x][y] = 0;
x++;
y++;
}
x = 0;
y = 0;
while(x<ro.size() && y<co.size())
{
chess[ro.get(x)][co.get(y)] = 1;
x++;
y++;
}
}
}
}
}
关于java - N 皇后区 - java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324315/
我自己解决了 N 皇后问题,并采用了解决方案中以及在线提到的不同方法。 我的代码适用于最多 4 个输入,但开始打印 4 个之后的任何值的每个案例(即使是错误的)。我已经检查了很多次,但我无法在其中找到
经典的 N 皇后问题找到了一种方法,将 n 个皇后放在 n×n 的棋盘上,使得没有两个皇后互相攻击。这是我对 N 皇后区问题的解决方案。 class Solution(object): def
我正在尝试将 N-Queen 拼图求解器修改为 N-Empress 求解器(棋子可以像车和马一样移动) 代码以一种不会相互威胁的方式放置(或至少试图放置)大臣。并回溯打印所有可能的解决方案。但是,我无
我正在尝试创建一个递归的 Swift 实现来解决经典难题:“我们如何在 n × n 的国际象棋网格上分配 n 个皇后,以便没有皇后可以威胁另一个”。 使用现有代码我遇到了以下问题: 代码不会生成 n=
我是一名优秀的程序员,十分优秀!