8皇后問題 c python實現

2022-09-18 02:24:25 字數 2288 閱讀 9288

問題描述:在8*8的西洋棋盤上擺放8個皇后,使其不能互相攻擊,即任何兩個皇后都不能處於同一行、同一列或者同一斜線上,問有多少種擺法。

演算法分析

利用3個數組分表來標記衝突,陣列a、b、c。

a陣列代表列衝突,a[0]~a[7]代表0~7列,如果a[0]=1,則表示第0列已有皇后。

b陣列帶表主對角線衝突,為b[行-列+7],即b[0]~b[14]中如果為1,表示該主對角線有皇后(如下圖)。

c陣列帶表從對角線衝突,為c[行+列],即c[0]~c[14]中如果為1,表示該從對角線有皇后(如下圖)。 

c++實現如下:

#include using

namespace

std;

static

char queen[8][9

];static

int a[8

];static

int b[15

];static

int c[15

];static

int iqueennum=0; //

記錄總的棋盤狀態數

void qu(int i);//

第i行int

main()

}//主、從對角線標記初始化,表示沒有衝突

for(iline=0;iline<15;iline++)

qu(0);

return0;

}void qu(int

i) cout

<

}cout

<

}//如果前次的皇后放置導致後面的放置無論如何都不能滿足要求,則回溯,重置

queen[i][icolumn]='*'

; a[icolumn]=0

; b[i-icolumn+7]=0

; c[i+icolumn]=0

; }}}

python實現如下:

#

-*- coding:utf-8 -*-

global

queue,a,b,c,queennum

queue=[['*'

for i in range(0,8)] for i in range(0,8)]

a=[0 for i in range(0,8)]

b=[0 for i in range(0,15)]

c=[0 for i in range(0,15)]

queennum=0

'''queue表示整個棋盤

a表示列的衝突

b表示正對角衝突

c表示從對角衝突

queennum表示第幾種擺法

'''def

fun(num):

global

queue, a, b, c, queennum

for icolumn in range(0,8): #

總共8行

if a[icolumn]==0 and b[num-icolumn+7]==0 and c[num+icolumn]==0: #

滿足3個條件

queue[num][icolumn]='@'

a[icolumn]=1 #

該列不能放入皇后

b[num-icolumn+7]=1 #

該正列不能放入皇后

c[num+icolumn]=1 #

該從列不能放入皇后

if num<7:

fun(num+1)

else: #

7行放滿了,輸出

queennum+=1

print

'第%d種情況:

'%queennum

for j in range(0,8):

print''

.join(queue[j])

print'\n

'#回溯 queue[num][icolumn]='*'

a[icolumn]=0

b[num-icolumn+7]=0

c[num+icolumn]=0

if__name__=='

__main__':

fun(0)

簡單8皇后問題的實現

今天有個朋友給我發了兩張截圖,我一看,哦,原來是左天他遇到8皇后問題了,他說讓我給他看看,我說試試就試試 三.總結 問題表述為 在8 8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。這裡有個小技巧,就是他已經要求不能在同一行有兩個qu...

8皇后問題

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2.b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...

8皇后問題

8 皇后問題 描述 八皇后問題是大數學家高斯於1850年提出來的。該問題是在8 8的西洋棋棋盤上放置8個皇后,使得沒有乙個皇后能 吃掉 任何其他乙個皇后,即沒有任何兩個皇后被放置在棋盤的同一行 同一列或同一斜線上。輸出8皇后問題所有結果。輸入 沒有輸入。輸出 每個結果第一行是no n 的形式,n表示...