java实现N皇后问题

N皇后问题(Java深度优先递归解法) N皇后问题的Java递归解法 阅读详情
N皇后问题描述:
将 n 个皇后摆放在一个 n x n 的棋盘上,使得每一个皇后都无法攻击到其他皇后。
深度优先遍历的典型案例。

程序输入:
    n的个数(需>4)
    棋盘上任意一个位置
程序输出:
    满足问题需求的棋盘坐标

程序代码如下:
Node类用于封装皇后的棋盘位置信息
public class Node {
	private int x;
	private int y;
	public Node(int x,int y){
		this.x=x;
		this.y=y;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	@Override
	public String toString() {
		return "(" + x + "," + y + ")";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + x;
		result = prime * result + y;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Node other = (Node) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}
}
Searcher类用于查询指定起始位置的N皇后坐标
public class Searcher {
	private int num=0;
	public Searcher(int num){
		this.num=num;
	}
	public List<Node> search(Node node){
		List<Node> solution=new ArrayList<Node>();
		if(qualified(node,solution)){
			return solution;
		}else{
			return null;
		}
	}
	/**
	 * 先序遍历
	 */
	private boolean qualified(Node node,List<Node> solution){
		if(attach(node,solution)){
			return false;
		}
		solution.add(node);
		if(solution.size()==num){//是否是最后一个节点
			return true;
		}
		//获取node的子节点
		boolean res=false;
		for(Node child:obtainChild(node)){
			if(qualified(child,solution)){
				res=true;
				break;
			}
		}
		if(!res){
			solution.remove(node);
		}
		return res;
	}
	private List<Node> obtainChild(Node node) {
		List<Node> res=new ArrayList<Node>();
		for(int i=0;i<num;i++){
			if(i==node.getX()){//过滤同一行
				continue;
			}
			for(int j=0;j<num;j++){
				if(j==node.getY()){//过滤同一列
					continue;
				}
				if(Math.abs(node.getX()-i)==Math.abs(node.getY()-j)){//过滤对角线;
					continue;
				}
				res.add(new Node(i,j));
			}
		}
		return res;
	}
	private boolean attach(Node node,List<Node> nodes){
		if(nodes.size()==0){//跳过首节点
			return false;
		}
		for(Node tempNode:nodes){
			if(node.getX()==tempNode.getX() ||//同一行
					node.getY()==tempNode.getY() ||//同一列
					Math.abs(node.getX()-tempNode.getX())==Math.abs(node.getY()-tempNode.getY())){//对角线
				return true;
			}
		}
		return false;
	}
}
Main类用于编码测试
public class Main {
	public static void main(String[] args) {
		Searcher searcher=new Searcher(6);
		List<Node> res=searcher.search(new Node(2,0));
		System.out.println(res);
	}
}
打印输出:[(2,0), (0,4), (1,2), (3,5), (4,3), (5,1)]

(Java实现) N皇后问题 n皇后问题是一个以国际象棋为背景的问题:在n×n的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行、纵行或斜线上。 蛮力法思想: 解决n皇后问题的思想本质上就是蛮力法,生成所有可能的摆放情况,并判断该情况是否满足要求,我们以树结构来表示解决问题的方法。以4*4的棋盘为例,第0层的根节点为空白的棋盘,第1层为只在棋盘的第一行摆放的四种... 阅读详情

相关推荐

Java实现经典N皇后问题与算法解析

N皇后问题是一个经典的问题,它要求在N×N的棋盘上放置N个皇后,使得它们互不攻击,即任意两个皇后都不在同一行、同一列或同一斜线上。随着N的增大,问题的复杂性呈指数级增长,对于N大于13时,问题的解决将变得极具挑战性。Java是一种面向对象的编程语言,广泛应用于企业级应用开发。其核心特性包括平台无关性、健壮性、多线程和网络编程能力。平台无关性得益于Java虚拟机(JVM)的存在,允许Java字节码在任何安装了JVM的系统上运行。

weixin_42323064的博客 936

Java——N皇后问题

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

m0_60867520的博客 4375

工业场景落地:Java+PaddleOCR实现高性能OCR文字识别的终极方案

本文深度解析基于Java的高性能工业级OCR实现方案,集成PP-OCRv5深度学习模型,提供: ✅ 多场景支持:手写体、竖排文本、票据表格的精准识别 ✅ 工业级性能:毫秒级响应,支持GPU加速与高并发处理 ✅ 开箱即用:通过Maven快速集成,5行代码完成文字识别 ✅ 完整技术栈:覆盖文本检测、方向校正、识别后处理全流程 附可运行示例代码,助您快速构建企业级OCR系统!

deng775747758的博客 3612

N皇后问题(Java实现)

在N×N的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行、纵行或斜线上。第一行输入皇后的数量N,输出N个皇在N∗N的棋盘上,在不吃掉其它皇后的情况下总共的放法种数示例892。

热爱编程、热爱生活、热爱探索 2143

深度学习笔记(1)机器学习与深度学习基础

一些深度学习的简单概念和Transformer的学习。

hanliu2003的博客 1493

【Claude】Extra inputs are not permitted 错误:代理剥离 Beta 标头的解决方案 bug报错已解决

深入分析Claude Code Extra inputs are not permitted 400错误的技术原理,解析代理剥离Beta标头的根因与多种修复方案。

一键难忘的博客 150

N皇后问题【java】【回溯法】

N皇后问题【java】【回溯法】N皇后问题概述N皇后问题java代码解析 N皇后问题概述 要想解决n皇后问题,首先要明白什么是n皇后问题。 在本篇文章中,借助 leetcode 51.N皇后问题 进行解析。 N皇后问题题目: n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 由上述题目

qq_51133939的博客 2888

[QMT量化交易小白入门]-二十八、有了回测年化收益好的策略,如何在QMT量化实盘呢(附python代码解析)

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 2927

回溯法—N皇后问题—java实现

问题描述:    要求在一个n×n的棋盘上放置n个皇后,使得它们彼此不受攻击。    按照国际象棋的规则,一个皇后可以攻击与之同一行或同一列或同一斜线上的任何棋子。    因此,n皇后问题等价于:要求在一个n×n的棋盘上放置n个皇后,使得任意两个皇后不在同一行或同一列或同一斜线上。一个皇后的攻击范围:                                    n皇后的解空间—完全n叉树...

至尊宝不住你 1万+

2025华为OD面试手撕代码真题目录及面试八股文

本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备

KJ.JK 5万+

大模型技术全景与核心概念解析:从基础原理到AI智能体架构(实时更新中)

本文系统解析了大模型技术的核心概念与架构。首先介绍了LLM(大语言模型)、LLMOps(模型运维)、AIGC(生成内容)、AGI(通用AI)等基础概念,重点阐述了大模型的工作原理,包括预处理、推理和后处理三个阶段。深入讲解了Token分词、FLOPs计算、Embedding向量表示等关键技术,并分析了LoRA微调、MoE架构等前沿方法。文章还探讨了AI智能体的发展前景,为理解大模型技术提供了全景视角。

算法工程师 1251

n皇后问题java_N皇后问题java实现

N皇后问题是一个典型的约束求解问题,利用递归机制,可以很快的得到结果。N皇后问题的描述:在一个n*n的棋盘上,摆放n个皇后,要求每个皇后所在行、列、以及两个对角线上不能出现其他的皇后,否则这些皇后之间将会相互攻击。如下图所示。利用递归机制,可以很容易的求解n皇后问题。针对八皇后,总共有92种解。下面将给出N-皇后问题的一般求解代码,在这里代码是使用java编码的。总共设计了三个类,一个是皇后类(Q...

weixin_39625987的博客 567

1、VMware vSphere 全面指南:从入门到精通

本文全面介绍了VMware vSphere从入门到精通的完整知识体系,涵盖基础概念、环境适配、部署规划、安装配置、网络与存储准备、虚拟机创建与管理、资源组织、事件监控、巡检流程、主机配置文件管理、资源池优化、高可用性与容错应用,以及故障排除方法。结合实用工具和部署技巧,帮助读者系统掌握vSphere的核心功能与运维实践,提升虚拟化环境的稳定性与管理效率。

pz890123的博客 96

n皇后问题java_经典n皇后问题java代码实现

问题描述:在n*n的二维表格,把n个皇后在表格上,要求同一行、同一列或同一斜线上不能有2个以上的皇后。例如八皇后有92种解决方案,五皇后有10种解决方案。public class TestQueen {int n; //皇后的个数int num = 0; // 记录方案数int[] queenCol; // 记录n个皇后所占用的列号boolean[] col; // 列安全标志boolean[] ...

weixin_39545017的博客 728

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

n皇后问题java实现

n皇后问题java实现

Simell的博客 302

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

N皇后问题java实现

N皇后问题java实现 简单来说就是dfs+回溯 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[][] map = new int[n][n]; dfs(map,

m0_48126147的博客 378

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

2n皇后问题JAVA实现

蓝桥杯练习题2n皇后问题

weixin_49356860的博客 297

2n皇后问题使用java实现

2n皇后问题用java实现 同样,先放问题 问题描述   给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。 输入格式 输入的第一行为一个整数n,表示棋盘的大小。 接下来n行,每行n个0或1的整数,如果一个整数为1...

qq_40796848的博客 555

递归 N皇后问题 Java实现

递归  N皇后问题  Java实现package Digui1zijibiande; import java.util.Scanner; //N皇后问题 public class S3 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int N=sc.nextInt(); ...

qq_17075997的博客 611

N皇后问题可视化实现(java)

package queens; import java.awt.Color; import java.awt.GridLayout; import java.awt.Image; import java.io.IOException; import java.util.Scanner; import javax.swing.ImageIcon; import javax.swing.JFrame

blowfire123的博客 1万+

n皇后问题实现GUI界面(java)

将n皇后问题可视化实现输出: 1、准备工作: ①新建一个长度为n的一维数组arr,n表示的是皇后的个数,表示皇后所放的位置。注意这个一维数组的各个参数的意义。其下标 i 表示皇后所放位置的行,相当于二维数组中的行,当然也相当于第 i + 1 个皇后,对应的值arr[i]表示皇后所放位置的列,相当于二维数组中的列。 ②新建窗口JFrame,然后进行设置其相关的参数,比如窗口可见setVisible,窗口的大小setSize(),setBounds()等。 ③新建一个n x n二维数组来表示按钮,从而当对按钮进

奋斗的龙猫的博客 1468

Java实现 蓝桥杯VIP 基础练习 2n皇后问题

基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述   给定一个n*n的棋盘,棋盘中有一些位...

5377

java分治算法实现n皇后问题

package com.company.Puzzal; /** * Created by likailong on 2016/10/22. */ import java.util.Arrays; /* * n皇后问题: * 在一个n * n的国际象棋盘上放置n个皇后 ,使得这n个皇后不在同一行同一列,同一对角线上 求复合的方案数量 * 因为皇后不能同一行和同一列,

李凯龙 842
上一篇: lucene高亮显示
下一篇: 贪心法求解活动安排(java实现)
JavaMan_chen
博客等级 码龄19年 329粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值