###### tags: `程式設計` # 第十週 ## 二維 list 一個 list 裡面還有其他的 list Ex: `[[], [], [], []]` ## 矩陣轉換 - 輸入 : - 整數 `row` `col` `n` - 矩陣的內容數字 - `n` 個 0 或 1 - 輸出 - 把輸入的矩陣,依照 0 1 的指令反著推回翻轉或旋轉前的矩陣 ## 八皇后問題 ```python= # 對一個n皇后問題 # 用n * n的矩陣來代表 # 一共有n條直線,n條橫線,2n-1條右上斜線,2n-1條右下斜線 # 如果我們用0~n-1直線,0~n-1代表n條橫線,以及0~2n-1代表某一條右上右下斜線 # 請問若皇后佔住(x,y)這個位置, 則五皇后佔住了哪幾條線? # (1)編號是x的橫線 # (2)編號是y的直線 # (3)編號是x+y的右上斜線 # (4)編號是x-y+(n-1)的右下斜線 # n : 一共要放幾個皇后 # board : 棋盤狀況 # row : 負責放哪個row的皇后 # straightFree : 直線是否可放 # uprightFree : 右上斜線是否可放 # downrightFree : 右下斜線是否可放 def myqueen(n, board, row, straightFree, uprightFree, downrightFree) : if row == n : # n queen put, so this is a solution for r in board : print(*r) print('*' * (2*n-1)) return for col in range(n) : # try each column if straightFree[col] and uprightFree[row+col] and downrightFree[row-col+n-1] : straightFree[col] = uprightFree[row+col] = downrightFree[row-col+n-1] = False board[row][col] = 'Q' straightFree[col] = uprightFree[row+col] = \ downrightFree[row-col+n-1] = False myqueen(n, board, row+1, straightFree, uprightFree, downrightFree) straightFree[col] = uprightFree[row+col] = \ downrightFree[row-col+n-1] = True board[row][col] = '.' # 印出n皇后問題的所有解 # n: 皇后數 def queen(n) : myqueen(n, [[ '.' for c in range(n)] for r in range(n)], 0, \ [True for i in range(n)], \ [True for i in range(2*n-1)], \ [True for i in range(2*n-1)]) def main() : n = int(input()) queen(n) if __name__ == '__main__' : main() ``` >有沒有人要幫我打註解 >[name=王為棟]