日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

常考数据结构与算法:N皇后问题

發(fā)布時(shí)間:2025/6/15 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常考数据结构与算法:N皇后问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考博客:?https://blog.csdn.net/weixin_39651041/article/details/79972829

?

題目描述

NN皇后問題是指在N*NN?N的棋盤上要擺NN個(gè)皇后,
要求:任何兩個(gè)皇后不同行,不同列也不再同一條斜線上,
求給一個(gè)整數(shù)NN,返回NN皇后的擺法數(shù)。

?

示例1

輸入

1

返回值

1

示例2

輸入

8

返回值

92

?

思路如下:

?

? 由于N皇后問題不允許兩個(gè)皇后在同一行,所以,可用一維數(shù)組X表示N皇后問題的解,X[i]表示第i行的皇后所在的列號。例如一個(gè)滿足要求的四皇后棋盤布局如下圖所示,其結(jié)果X數(shù)組的值為:[2, 4, 1, 3]。

由上述X數(shù)組求解N皇后問題,保障了任意兩個(gè)皇后不在同一行上,而判定皇后彼此不受攻擊的其他條件,可以描述如下:

(1)X[i] = X[s],則第i行與第s行皇后在同一列上。

(2)如果第i行的皇后在第j列,第s行皇后在第t列,即X[i] = j和X[s] = t,則只要i-j = s-t或者i+j = s+t,說明兩個(gè)皇后在同一對角線上。

對兩個(gè)等式進(jìn)行變換后,得到結(jié)論:只要|i-s| = |j-t|(即i-s = X[i]-X[s]),則皇后在同一對角線上。

?

public class NqueenMe {int resultCount = 0;public static void main(String[] args) {//int[] queen = new int[8];NqueenMe nqueenMe = new NqueenMe();nqueenMe.Nqueen(9);System.out.println(nqueenMe.resultCount);}public int Nqueen (int n) {int[] queen = new int[n];tria(queen,0,n);return resultCount;}private void tria(int[]arr, int i, int n){if(i >= n){++resultCount;for (int j = 0; j < n; j++) {System.out.print(arr[j]+" ");}System.out.println();}else{for (int j = 0; j < n; j++) {arr[i] = j; // 第i行第j列if(place(arr, i)){// 結(jié)點(diǎn)滿足約束條件,則遞歸進(jìn)入下一層繼續(xù)遍歷,否則跳過tria(arr, i+1, n);}}}}private boolean place(int[] arr, int s){// 判定s行X[s]位置上的皇后,與1至s-1行上各皇后的位置是否滿足約束條件for (int i = 0; i < s; i++) {// 同一列 或者 處于對角線if(arr[i] == arr[s] || (Math.abs(i-s) == Math.abs(arr[i] - arr[s]))){return false;}}return true;}}

?

?

?

總結(jié)

以上是生活随笔為你收集整理的常考数据结构与算法:N皇后问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。