八皇后II

Posted wilderness

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八皇后II相关的知识,希望对你有一定的参考价值。

用一个数组state记录已经选择的每一行皇后所在的位置,DFS

 1 count = 0
 2 N = 8
 3 state = [0]*N
 4 
 5 def dfs(row):
 6     global count
 7     for col in range(N):
 8         for i in range(row):
 9             if col == state[i] or abs(i-row) == abs(col-state[i]):
10                 break
11         else:
12             if row == N-1:
13                 count += 1
14             else:
15                 state[row] = col
16                 dfs(row+1)
17 
18 dfs(0)
19 print(count)

在整数shu,pie,na中用每个bit位记录已经被占用的 竖,撇,捺

 1 count, N, pie, na, shu = 0, 8, 0, 0, 0
 2 
 3 def dfs(row):
 4     global count, pie, na, shu
 5     for col in range(N):
 6         j, i = row+col, N-1-row+col
 7         #验证此位置是否可行
 8         if not ((shu >> col) | (pie >> j) | (na >> i)) & 1:
 9             if row == N-1:
10                 count += 1
11             else:
12                 #记录此位置
13                 shu ^= (1 << col); pie ^= (1 << j); na ^= (1 << i)
14                 dfs(row+1)
15                 #清除此位置信息
16                 shu ^= (1 << col); pie ^= (1 << j); na ^= (1 << i)
17 
18 if __name__ == __main__:
19     dfs(0)
20     print(count)

 

以上是关于八皇后II的主要内容,如果未能解决你的问题,请参考以下文章

对八皇后的补充以及自己解决2n皇后问题代码

八皇后

八皇后,回溯与递归(Python实现)

基于WPF的八皇后简单应用程序

八皇后

八皇后问题