Python 用對角線求和判斷解N皇后問題

2021-10-24 14:21:48 字數 2269 閱讀 6269

import numpy as np

#輸入乙個數n為皇后個數

n =int

(input()

)#因為要用到窮舉,所以確定乙個最小數1*n,乙個最大數n*n

min=

int(

'1'*n)

max=

int(

str(n)

*n)result =

#以n=5為例,從11111開始迭代到55555,判斷每乙個數,如果包含0,6,7,8,9,就跳過,如果沒有則判斷重複,如果沒有重複數字如22333這種,就加到result列表中。

for i in

range

(min

,max+1

):tem =

[int

(x)for x in

list

(str

(i))

] judge_list =

['1'if0

< x <= n else

'0'for x in tem]

iflen

(set

(tem)

)<

len(tem)

or'0'

in judge_list:

continue

else

:#對角線求和判斷,顧名思義,就是對每一條對角線進行求和運算,如果不存在和大於1的對角線,就為正確結果

zore =[[

0for i in

range

(n)]

for i in

range

(n)]

for i in

range

(len

(result)):

zore =[[

0for i in

range

(n)]

for i in

range

(n)]

for j in

range

(len

(result[i]))

: zore[j]

[result[i]

[j]-1]

=1for j in

range(1

,n):

tem =

for x in

range

(j+1):

[x])

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

continue

for j in

range

(n):

tem =

for x in

range

(j+1):

[n-1

-j+x])if

sum(tem)

>1:

break

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

continue

for j in

range

(n):

tem =

for x in

range

(j+1):

1-j+x]

[x])

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

continue

for j in

range

(n):

tem =

for x in

range

(j+1):

1-j+x]

[n-1

-x])

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

break

ifsum

(tem)

>1:

continue

zore = np.asarray(zore)

print

(zore)

方陣對角線元素求和及計數!!

對輸入的乙個n n的方陣,求其兩條對角線上的元素之和及非零元素的數量。輸入格式 第一行輸入乙個不超過20的正整數n,在接下來的n行中,依次輸入方陣的每一行的n個元素,方陣元素為絕對值不超過1000的整數,中間以空格間隔。輸出格式 在一行中以sum s count c 的格式輸出方陣兩對角線上的元素之...

題目 1024 程式設計入門 矩陣對角線求和

題目描述 求乙個3 3矩陣對角線元素之和。樣例輸入 1 2 3 1 1 1 3 2 1解題思路 設定兩個迴圈分別求兩個對角線的和,尋找兩條對角線的數學關係進行求解。部分 首先定義陣列,然後設定迴圈輸入矩陣,利用第乙個迴圈求主對角線的和關係是行列的座標數相同,利用第二個迴圈求斜對角線的 和,關係是座標...

python 矩陣按對角線列印

description 將乙個矩陣 二維陣列 按對角線向右進行列印。搜了一下發現好像是美團某次面試要求半小時手撕的題 example input 1,2,3,4 5,1,2,3 9,5,1,2 output 4 3,3 2,2,2 1,1,1 5,5 9 思路 考慮每條對角線開頭元素的index i...