今天有個朋友給我發了兩張截圖,我一看,哦,原來是左天他遇到8皇后問題了,他說讓我給他看看,我說試試就試試
三.總結
問題表述為:
在8×8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
這裡有個小技巧,就是他已經要求不能在同一行有兩個queen,那我們就可以建立乙個一維陣列即可,不需要二維陣列.
**如下:
int max=8;
int[
] array=
newint
[max]
;static
int count =0;
//計數器計算有多少種排法
private
void
check
(int n)
//依次放入皇后,判斷是否衝突
for(
int i =
0; i )else
}
print()方法編寫如下:
private
void
print()
system.out.println ();
}
judge()方法編寫如下:
//檢視現在的皇后和以前的是否衝突
private
boolean
judge
(int n)
}return
true
;}
這裡對 math.abs (n-i) == math.abs(array[n]-array[i]) 判斷是否在同一條對角線作一下解釋:
首先math.abs(n-i)代表的是第 i -1行到第 n-1 行的距離.
math(array[n]-array[i])代表的是第i-1列到第n-1列的距離,
然後**當第 i -1行到第 n-1 行的距離.與第i-1列到第n-1列的距離,**相等的時候,那麼這兩個queen就在同一條斜線上了.就是醬紫
public
static
void
main
(string[
] args)
//編寫放置皇后
private
void
check
(int n)
//依次放入皇后,判斷是否衝突
for(
int i =
0; i )else
}}
n皇后問題n皇后
還有n皇后||
還有面試題8皇后
8皇后問題 c python實現
問題描述 在8 8的西洋棋盤上擺放8個皇后,使其不能互相攻擊,即任何兩個皇后都不能處於同一行 同一列或者同一斜線上,問有多少種擺法。演算法分析 利用3個數組分表來標記衝突,陣列a b c。a陣列代表列衝突,a 0 a 7 代表0 7列,如果a 0 1,則表示第0列已有皇后。b陣列帶表主對角線衝突,為...
8皇后演算法的簡單實現(回溯)
package com.cai.learn.math 8皇后問題運算 回溯演算法 思路 1.第乙個皇后放在第一行,第一列 2.第二行皇后放在第二行第一列,然後判斷是否ok,如不ok,繼續放在第二列,第三列.第8列,找個乙個合適的位置 3.繼續第三個皇后.4.得到乙個正確的時候,在棧回退到上乙個棧時,...
遞迴實現n(經典的8皇后問題)皇后的問題
問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上,此問題進而可以推廣為n皇后的問題。解題思路 n n的矩陣,遞迴每乙個點,當皇后數量達到n的時候,進行判斷...