###### 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=王為棟]