package com.lagou.edu.autodeliver;
import java.util.*;
public class Solution {
// 存放下棋的记录
int[] arr;
// 棋盘大小
int n;
// 记录摆法数量
int count;
/**
*
* @param n int整型 the n
* @return int整型
*/
public int Nqueen (int n) {
// write code here
// 初始化
this.n = n;
this.arr = new int[n];
execute(0);
return count;
}
/**
* rowNum,当前下棋的行
*/
public void execute (int rowNum) {
if(rowNum==n){
System.out.println(Arrays.toString(arr));
count++;
return;
}
// j 代表列,每一列都要尝试放棋子
for(int j=0; j<n; j++) {
// 检查这个位置能不能放棋子
if(judge(rowNum, j)) {
arr[rowNum] = j;
execute(rowNum+1);
}
}
}
public boolean judge(int n, int j) {
for(int i=0;i<n;i++) {
// arr[i]==j 表示在同一列
// Math.abs(n-i)==Math.abs(j-arr[i]) 表示x和y是对角线
if(arr[i]==j || Math.abs(n-i)==Math.abs(j-arr[i])){
return false;
}
}
return true;
}
public static void main(String[] args) {
System.out.println(new Solution().Nqueen(8));
}
}
N皇后问题
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 八皇后的来源 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇...
- 福哥答案2021-02-16: 自然智慧即可。1.普通递归。有代码。需要判断同列和斜线。2.位运算递归。有代码。3...
- The n-queens puzzle is the problem of placing n queens on...