IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Java实现八皇后问题 -> 正文阅读

[数据结构与算法]Java实现八皇后问题

问题说明:

八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:

在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。在计算机问世后有更多的方法。

问题分析:

对于一个8 x 8的棋盘来说,我们很容易想象到使用二维数组来解决这个问题,但实际上我们只需要使用一个一维数组。

我们通过一维数组arr[8]来解决,首先我们可以利用下标 i 用来代表行数-1,arr[i]中的值代表列数-1,这样我们就很好的完成了对于一个棋盘的设计。

步骤:

1. 将第一个王后放在第一行的第一列。

2. 将第二个皇后放置第二行的第一列,然后进行判断是否满足条件,如果不满足则放置在第二列、第三列...,直到满足条件。

3. 继续第三个皇后放置第三行的第一列,然后继续判断是否满足,如果不满足则放置第二列、第三列... 。

4. 当得到一个正确的解后,我们可以将其打印出来,然后进行回溯,重新回到第一步,然后重复2、3、4步,直到所有的情况都结束,完成程序。

代码实现如下:

public class Queue02{
     static int Max=8;
     static int a[]=new int[Max]; 
     static int count=0;
	public static void main(String[] args){
		put(0);
		System.out.println("最多有"+count+"种排序");

	}
	public static void print(){
		count++;
		for(int i=0;i<Max;i++){
			System.out.print(a[i]+" ");
		}
		System.out.println();
	}

	public static boolean judge(int n){
		for(int i=0;i<n;i++){
			if(a[n]==a[i] || n-i==Math.abs(a[n]-a[i])){
				return false;
			}
		}
		return true;
	}

	public static void put(int n){
            //打印完结束
		if(n == Max){
			print();
			return;
		}

		for(int i=0;i<Max;i++){
			a[n]=i;
			if(judge(n)){
				put(n+1);
			}
		}
	}
}

?就此实现八皇后问题。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:03:13  更:2022-03-13 22:03:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:42:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码