LeetCode 52.N-Queens II
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 52.N-Queens II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
804. N-Queens II(N 皇后 II)
?
題目:
n?皇后問題研究的是如何將?n?個皇后放置在?n×n?的棋盤上,并且使皇后彼此之間不能相互攻擊。
給定一個整數?n,返回?n?皇后不同的解決方案的數量。
示例:
輸入: 4輸出: 2解釋: 4 皇后問題存在如下兩個不同的解法。[[".Q..", ?// 解法 1"...Q","Q...","..Q."],["..Q.", ?// 解法 2"Q...","...Q",".Q.."]]?
思路:
?
這題思路較清晰,先在第一行第一列放置皇后,之后第二行尋找可以放皇后的地方,一行一行放置,如果哪一行不能放置,那么就回溯到上一行,如果放置到了最后一行,那么就代表這種情況成立,計數加一,返回之前一步。?
?
?
圖解:
從左上角開始,line1是正對角線,line2是斜對角線,col是豎列。
? ? ? ?
?
代碼:
?
1 //列 2 private static boolean col[]; 3 4 //正對角線 x-y+n-1 5 private static boolean line1[]; 6 7 //斜對角線 x+y 8 private static boolean line2[]; 9 10 public static int totalNQueens(int n) 11 { 12 col = new boolean[n]; 13 line1 = new boolean[2 * n - 1]; 14 line2 = new boolean[2 * n - 1]; 15 return putQueen(n, 0); 16 } 17 18 private static int putQueen(int n, int index) 19 { 20 int flag = 0; 21 if (index == n) 22 return 1; 23 24 for (int i = 0; i < n; i++) 25 { 26 if (!col[i] && !line1[i - index + n - 1] && !line2[i + index]) 27 { 28 29 col[i] = true; 30 line1[i - index + n - 1] = true; 31 line2[i + index] = true; 32 flag = flag + putQueen(n, index + 1); 33 34 col[i] = false; 35 line1[i - index + n - 1] = false; 36 line2[i + index] = false; 37 } 38 } 39 return flag; 40 } View Code?
轉載于:https://www.cnblogs.com/blogxjc/p/10890322.html
總結
以上是生活随笔為你收集整理的LeetCode 52.N-Queens II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何搭建一个简易的Web框架
- 下一篇: Tarjan水题系列(2):HNOI20