问题: 求解N皇后问题的所有可能的解
package com.xx.dataStructure.stack; //求解N皇后问题的所有解 public class Queen { private int solution = 0; private int n; public Queen(int n){ assert(n > 0); this.n = n; this.solution = 0; } public static void main(String [] args){ solveProblem(new Queen(1)); solveProblem(new Queen(2)); solveProblem(new Queen(3)); solveProblem(new Queen(4)); solveProblem(new Queen(5)); solveProblem(new Queen(6)); solveProblem(new Queen(7)); solveProblem(new Queen(8)); } public static void solveProblem(Queen queen){ int [] queens = new int[queen.n]; System.out.println( queen.n + " 皇后问题....."); placeQueen(queens,1,queen); } //放置第n个Queen //N为总共要放的Queen个数 public static void placeQueen(int [] queens,int n,Queen queen){ for(int i = 0; i< queen.n ; i ++){ if (canPlaceQueen(queens,n-1,i)) { queens[n-1] = i; if (n == queen.n){ //output System.out.println("the " + ++queen.solution +" th solution"); for(int i0 = 0; i0 < queen.n; i0++){ for(int j0 = 0; j0 <queen.n ;++j0){ if (j0 == queens[i0] ){ System.out.print("Q "); }else { System.out.print("X "); } } System.out.println(); } System.out.println(); break; }else { placeQueen(queens,n+1,queen); } } } } // public static boolean canPlaceQueen(int [] queens,int placedQueenNum,int y){ boolean result = true; for(int i = 0; i < placedQueenNum ; ++i ){ //在同一列 if ( queens[i] == y){ result = false; break; } //在对角线 if (Math.abs(placedQueenNum - i) == Math.abs(queens[i] - y)) { result = false; break; } } return result; } }
程序输出
1 皇后问题..... the 1 th solution Q 2 皇后问题..... 3 皇后问题..... 4 皇后问题..... the 1 th solution X Q X X X X X Q Q X X X X X Q X the 2 th solution X X Q X Q X X X X X X Q X Q X X 5 皇后问题..... the 1 th solution Q X X X X X X Q X X X X X X Q X Q X X X X X X Q X the 2 th solution Q X X X X X X X Q X X Q X X X X X X X Q X X Q X X the 3 th solution X Q X X X X X X Q X Q X X X X X X Q X X X X X X Q the 4 th solution X Q X X X X X X X Q X X Q X X Q X X X X X X X Q X the 5 th solution X X Q X X Q X X X X X X X Q X X Q X X X X X X X Q the 6 th solution X X Q X X X X X X Q X Q X X X X X X Q X Q X X X X the 7 th solution X X X Q X Q X X X X X X Q X X X X X X Q X Q X X X the 8 th solution X X X Q X X Q X X X X X X X Q X X Q X X Q X X X X the 9 th solution X X X X Q X Q X X X X X X Q X Q X X X X X X Q X X the 10 th solution X X X X Q X X Q X X Q X X X X X X X Q X X Q X X X 6 皇后问题..... the 1 th solution X Q X X X X X X X Q X X X X X X X Q Q X X X X X X X Q X X X X X X X Q X the 2 th solution X X Q X X X X X X X X Q X Q X X X X X X X X Q X Q X X X X X X X X Q X X the 3 th solution X X X Q X X Q X X X X X X X X X Q X X Q X X X X X X X X X Q X X Q X X X the 4 th solution X X X X Q X X X Q X X X Q X X X X X X X X X X Q X X X Q X X X Q X X X X .........
相关推荐
1. **数组**:数组是最基础的数据结构之一,它在内存中连续存储相同类型的数据。动画演示可以展示数组的插入、删除和查找操作,以及一维、二维数组的概念。 2. **链表**:链表由一系列节点组成,每个节点包含数据和...
数据结构是计算机科学中的核心课程之一,它研究如何在计算机中高效地组织和管理数据,以便进行快速查找、插入和删除等操作。本资源“数据结构1800题和答案”显然是为准备数据结构考试,尤其是考研的学生设计的,包含...
- **递归与分治**:如斐波那契数列、汉诺塔、八皇后问题等,递归是解决复杂问题的强大工具。 - **动态规划**:背包问题、最长公共子序列、最短路径等,通过构建状态转移方程解决优化问题。 - **图算法**:深度...
道01数据结构和算法绪论. mp402_谈谈算法. mp4 西03_时间复杂度和空间复杂度.mp404_时间复杂度和空间复杂度2.mp405_时间复杂度和空间复杂度3.mp4险06线性表. mp407_线性表2. mp408_线性表3. mp4品09_ 线性表4. mp...
这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书中使用的软件工程原则和概念以及UML图便于增强学生的理解。 ◆ 详细介绍了数据抽象,强调规范...
6. **回溯法与分支限界**:在解决组合优化问题如八皇后问题、N皇后问题、旅行商问题中常见。 7. **贪心算法**:通过局部最优解逐步构建全局最优解,如霍夫曼编码、Prim's最小生成树算法等。 8. **递归与分治策略**...
8. **回溯法与分支限界法**:这些是用于解决约束满足问题和组合优化问题的方法,如八皇后问题、N皇后问题等。 9. **数据结构实现**:在JavaScript环境中,我们将学习如何实现上述数据结构,理解它们的内部工作原理...
8. **数据结构**:如栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)和图(Graph)等,它们是实现这些算法的基础。 在这个Java实现的压缩包中,`TypicalCode.java`很可能是包含一个或多个以上算法的...
8. **数据结构**:数组、链表、栈、队列、树、图等,理解它们的特性及操作,如二叉搜索树、平衡树(AVL、红黑树)等。 9. **递归与递推**:理解递归的基本概念,掌握递归函数的编写和递推公式的应用。 10. **...
《数据结构与算法分析》是Mark Allen Weiss的经典著作,它主要关注的是计算机科学中的核心主题——数据结构和算法。这本书的1997年版以其深入浅出的讲解和丰富的实例,深受程序员和计算机科学学生的喜爱。"回到基础...
9. **回溯法**:用于解决组合优化问题,如八皇后问题、N皇后问题、数独求解等。 10. **编码实现**:视频教程会包含实际的编程实现,可能使用Java、C++、Python等常见编程语言,让学习者能亲手实践并理解算法的运行...
6. **递归与回溯**:递归是解决问题的一种简洁方式,而回溯则常用于解决组合优化问题,如八皇后问题、N皇后问题、数独等。 7. **贪心算法**:适用于有局部最优解可以导向全局最优解的问题,如霍夫曼编码、活动安排...
文章中提到了递归调用的几个关键优点:递归使得复杂问题的求解变得简单直观,它能够在不增加程序复杂性的情况下解决某些问题,例如在处理树形结构数据时,递归可以提供一种非常清晰的解决方案。同时,递归是解决诸如...
5. **递归与回溯**:理解递归的基本原理,掌握递归函数的设计,以及在解决组合优化问题(如八皇后问题、N皇后问题)中的回溯算法。 6. **字符串处理**:KMP算法、Boyer-Moore算法、Rabin-Karp算法等在字符串匹配中...
**算法分析与设计是计算机科学的核心领域之一,它涉及到如何有效地解决问题并编写高效的计算机程序。在本试卷中,我们将深入探讨这一主题,涵盖各种算法的分析、设计技巧以及实际应用。** **一、算法分析** 1. **...
广东工业大学(简称广工)的这门课程涵盖了算法的基本概念、常用数据结构、算法设计策略以及复杂度分析等多个方面。下面将围绕这些知识点进行详细的阐述。 一、算法基础 1. 算法定义:算法是一系列明确的步骤,用于...
7. **数据结构**:书中涵盖了一系列重要的数据结构,如数组、链表、栈、队列、哈希表、树(二叉树、平衡树如AVL和红黑树)和图等。理解这些数据结构的特性和操作是提升编程能力的基础。 8. **递归与迭代**:递归是...
5. **回溯法**:用于解决组合优化问题,如八皇后问题、N-皇后问题、图的着色问题等。 6. **贪心算法**:在每一步选择局部最优解,期望最终得到全局最优解,如霍夫曼编码、Prim最小生成树算法、Kruskal最小生成树...
学习者将了解到不同数据结构的特点及其在解决问题中的应用。 第三章:贪心法是解决优化问题的一种策略,这一章可能会详细解释贪心算法的工作原理,通过实例演示如何通过局部最优选择来达到全局最优解。同时,可能会...