n皇后,排列树
来源:互联网 发布:js获取今天年月日 编辑:程序博客网 时间:2024/09/21 06:35
package com.alo.offer;public class WolfQueen { /** * 一共有多少个皇后(此时设置为8皇后在8X8棋盘,可以修改此值来设置N皇后问题) */ int max = 8; /** * 该数组保存结果,第一个皇后摆在array[0]列,第二个摆在array[1]列 */ int[] array = new int[max]; public static void main(String[] args) { new WolfQueen().check(0); } /** * n代表当前是第几个皇后 * @param n * 皇后n在array[n]列 */ int []a = {0,1,2,3,4,5,6,7}; private void check(int n) { //终止条件是最后一行已经摆完,由于每摆一步都会校验是否有冲突,所以只要最后一行摆完,说明已经得到了一个正确解 if (n == max) { print(); return; } //从第一列开始放值,然后判断是否和本行本列本斜线有冲突,如果OK,就进入下一行的逻辑 for (int i = n; i < max; i++) { array[n] = a[i]; swap(a,n,i); if (judge(n)) { check(n + 1); } swap(a,n,i); } } private void swap(int []a,int i,int j) {// TODO Auto-generated method stub int temp=a[i]; a[i]=a[j]; a[j]=temp;}private boolean judge(int n) { for (int i = 0; i < n; i++) { if ( Math.abs(n - i) == Math.abs(array[n] - array[i])) { return false; } } return true; }int k=0; private void print() { ++k; System.out.print("这是第"+k+"种解法"); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + 1 + " "); } System.out.println(); }}
阅读全文
0 0
- n皇后,排列树
- 全排列问题与n皇后问题
- 【回溯】子集树和排列树(装载/最大团/n皇后/旅行商)
- 递归实现N个数的排列,八皇后
- C++ 输出全排列 简单递归 N皇后问题
- N皇后问题(回溯VS全排列)
- 递归回溯问题的四道经典题:N皇后,组合,全排列,二叉树路径和
- n皇后
- N皇后
- N 皇后
- n皇后
- n皇后
- N皇后
- N皇后
- n皇后
- n 皇后
- N皇后
- N皇后
- 使用 DialogFragment 和 BottomSheet 实现底部弹出框
- Spring 报 NoSuchBeanDefinitionException
- 技术文章 | 深入剖析:关于cache buffers chains的经典案例处理详解
- 解决 CPU topology doesn't match maximum vcpu count
- 大化设计模式-单例模式
- n皇后,排列树
- Android录音与播放录音实现
- 黑客术语基础知识
- ASP.NET身份验证方式
- Windows下使用linux命令
- HTML5移动端通过touch事件判断手势方向及页面到达底部
- 安卓开发获取总方法数
- ubuntu apt-get update 失败解决方法
- 生成数据表的SQL 语句