package com.m.demo7;
public class Quene8 {
/**
* 8行8列,每2个不能在同一行 同一列 同一斜线
* 因为不能在同一行,使用一维数组,直接表示列
* 同一列判断:数组值不同
* 同一斜线判断:等腰直角三角形
*
* @param args
*/
static int maxsize=8;
static int[] array=new int[maxsize];
// 打印数组
public static void show() {
for(int item:array) {
System.out.print(item+" ");
}
System.out.println();
}
// 判断位置是否和之前的在同一列 同一斜线
public static boolean isPosition(int n) {
for(int i=0;i<n;i++) {
if(array[i]==array[n]||Math.abs(i-n)==Math.abs(array[i]-array[n])) {
return true;
}
}
return false;
}
// 8个棋子开始放置位置 :从n个棋子开始放
public static void putPosition(int n) {
if(n==maxsize) {//n=9结束
show();
return;
}else {
for(int i=0;i<maxsize;i++) {//每一个棋子有8个位置可以放,从0开始放
array[n]=i;//只有第一个棋子的位置正确,才进入if里面 放下一个棋子
if(!isPosition(n)) {//只有不在同一行同一列同一斜线,位置才正确,然后放下一个棋子,一轮结束有8 个棋子
putPosition(n+1);
}
}
}
}
public static void main(String[] args) {
putPosition(0);
}
}
递归之八皇后问题
最新推荐文章于 2024-07-27 13:31:57 发布