问题: 求解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 .........
相关推荐
本资源是数据结构中利用非递归法实现n皇后问题的一个C++代码,仅供参考,欢迎指正
数据结构课程设计N皇后问题 ,是表弟写的 很不错 ^_^
我用二维数组代表棋盘,用户输入棋盘的维度N,程序输出所有合法布局以及布局的个数。也就是说,几皇后,程序都可以输出合法布局以及个数。输入0,结束程序。 代码非常简单易懂,注释很全,与网上的不同,没有用指针...
本资源是数据结构中利用递归法实现n皇后问题的一个C++代码,仅供参考,希望大家指正问题
数据结构八皇后问题 eightqueens
用递归解决N皇后问题,递归递归递归,效率很低,新手勿喷
n皇后问题问题递归算法 n皇后问题问题递归算法 #include #include #define m 4 int x[m]={0}; bool place(int k,int j)//判断第K个皇后能否放在第X[K]列上 { int i; for(i=1;i;i++) { if((x[i]==j)||abs(x[i]-j)...
该资源详细的介绍了关于N语言的算 法。在数据结构以及C语言的应用中具有很深刻引导力
N后问题,用非递归的方式去求解。
用递归回溯和非递归的回溯实现N皇后问题。
N皇后问题求解,分别是递归方法实现和非递归方法实现,后者采用回溯方法,C语言实现的
n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---...
C语言实现N皇后问题非递归求解 ---- Word版本。
算法设计:对于八皇后的拓广,使用递归实现n皇后要求在广义的n*n方格棋盘上放置n个皇后,使它们互不攻击,共有多少种不同的放置方式?试分别求出n皇后的各个解。
用递归方法来求解八皇后问题,C++源码,有需要可以下载
print(int n):输出一个解。 place(int k ,int j):测试(k,j)位置能否摆放皇后
java 数据结构 递归 八皇后 完美递归 java 数据结构 递归 八皇后 完美递归
给定n×n的棋盘(假定n=4),用递归算法求出n个皇后全部的放置方法。每个皇后的位置用(k, x(k))表示,k表示行号,x(k)表示列号。为方便起见,输出结果的行号和列号都从1开始。将计算出的n个皇后的全部放置方法分行...
C++实现八皇后问题 用递归的方法,实现八皇后问题
本算法是根据经典的八皇后的问题提出来的,采用了递归回溯法解决问题。