(r)
| 5 | pdiags = set() |
| 6 | ndiags = set() |
| 7 | def gen(r): |
| 8 | if r == n: |
| 9 | res.append([''.join(row) for row in board]) |
| 10 | return |
| 11 | for c in range(n): |
| 12 | if c in cols or r+c in pdiags or r-c in ndiags: |
| 13 | continue |
| 14 | board[r][c] = 'Q' |
| 15 | cols.add(c) |
| 16 | pdiags.add(r+c) |
| 17 | ndiags.add(r-c) |
| 18 | gen(r + 1) |
| 19 | board[r][c] = '.' |
| 20 | cols.remove(c) |
| 21 | pdiags.remove(r+c) |
| 22 | ndiags.remove(r-c) |
| 23 | gen(0) |
| 24 | return res |
| 25 |