热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode051NQueens

n皇后问题研究的是如何将n个皇后放置在nn的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

示例:输入: 4
输出: [[".Q..", // 解法 1"...Q","Q...","..Q."],["..Q.", // 解法 2"Q...","...Q",".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。

用三个set()记录矩阵内因放入皇后而封住的格子

self.col是列,self.pie是row+col表示的 ‘/’ 方向 self.na是row-col表示的 ‘’ 方向。

参数cur_state的第i个元素表示第i行第cut_state[i]个位置放置皇后

用深度优先搜索方法,逐行递归下去,递归终止条件是行数加到n时,此时即生成了一种解决方案,放入结果数组。

每次递归内,迭代第row行第col列,检查这个点位是否安全,即row和col是否存在于三个set中,安全的话,就把自身攻击范围添加至三个set内,继续下个递归,cur_state.append这一行的列值 col。

递归函数后记得取出放置的皇后,即更新self.col,self.pie,self.na。

class Solution:import pysnooper
# &#64;pysnooper.snoop()def solveNQ(self, n):if n < 1: return []self.res &#61; []self.cols,self.pie,self.na &#61; set(),set(),set() # 使用集合来保存皇后攻击范围self.dfs(n, 0, [])return self.gen_res(n)&#64;pysnooper.snoop()def dfs(self, n, row, cur_state):if row >&#61; n:self.res.append(cur_state)returnfor col in range(n):if col in self.cols or col &#43; row in self.pie or row-col in self.na:# 若第row行第col列可被攻击到&#xff0c;则退出此次循环&#xff0c;寻找下个可安置皇后的位置continue# 若第row行和col列是安全的&#xff0c;则可放置皇后&#xff0c;并添加该皇后的攻击范围self.cols.add(col)self.pie.add(row&#43;col)self.na.add(row-col)self.dfs(n, row&#43;1, cur_state&#43;[col])# 继续找下一行可放置皇后的位置# 按照刚才放置皇后&#xff0c;若不能放置所有的皇后时&#xff0c;需要还原作案现场self.cols.remove(col)self.pie.remove(row&#43;col)self.na.remove(row-col)# &#64;pysnooper.snoop()def gen_res(self, n):board &#61; []for res in self.res:for i in res:board.append(&#39;.&#39;*i &#43; &#39;Q&#39;&#43; &#39;.&#39;*(n-1-i))return [board[i:i&#43;n] for i in range(0,len(board),n)]

s &#61; Solution()

res &#61; s.solveNQ(4)
print(res)

分析&#xff1a;cur_state[i]存放的是第i行的皇后所在的位置&#xff0c;递归以行的形式递归&#xff0c;每次放置的皇后要判断是否与前f面已经放置的皇后冲 突。从cur_state[row] &#61; 0开始一直到n-1&#xff0c;判断是否安全 如果安全就进行下一行的摆放&#xff0c;每次递归到row&#61;&#61;n的时候表示当前所有n个皇 后已经摆放完成&#xff0c;此时将当前完成的结果保存在res&#xff0c;后根据cur_state[i]存放i行皇后的位置的特性将res数组里面res[i][cur_state[i]]置为’Q’,return。这样递归结束就能找到所有的摆放方法。这是一个深度优先的过程&#xff0c;从在第一行放在第一个位置开始&#xff0c;摆放第二行 、第三行…直到最后一行。然后cur_state[row]&#43;&#43;,表示将第一行放在第二个位置…然后摆放第二行、第三行…直到最后一行……直到所 有的情况深度优先搜索完成

[[&#39;.Q..&#39;, &#39;...Q&#39;, &#39;Q...&#39;, &#39;..Q.&#39;], [&#39;..Q.&#39;, &#39;Q...&#39;, &#39;...Q&#39;, &#39;.Q..&#39;]]Starting var:.. cur_state &#61; []
Starting var:.. n &#61; 4
Starting var:.. row &#61; 0
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.155163 call 12 def dfs(self, n, row, cur_state):
15:30:59.155163 line 13 if row >&#61; n:
15:30:59.155163 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.155163 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.155163 line 22 self.cols.add(col)
15:30:59.155163 line 23 self.pie.add(row&#43;col)
15:30:59.156163 line 24 self.na.add(row-col)
15:30:59.156163 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [0]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 1
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.156163 call 12 def dfs(self, n, row, cur_state):
15:30:59.156163 line 13 if row >&#61; n:
15:30:59.156163 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.156163 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.156163 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.156163 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.156163 line 20 continue
15:30:59.157160 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.157160 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.157160 line 22 self.cols.add(col)
15:30:59.157160 line 23 self.pie.add(row&#43;col)
15:30:59.157160 line 24 self.na.add(row-col)
15:30:59.157160 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [0, 2]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 2
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.157160 call 12 def dfs(self, n, row, cur_state):
15:30:59.157160 line 13 if row >&#61; n:
15:30:59.157160 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.157160 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.158160 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.158160 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.158160 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.158160 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.158160 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.158160 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.158160 line 20 continue
15:30:59.158160 line 17 for col in range(n):
15:30:59.160161 return 17 for col in range(n):
Return value:.. None
15:30:59.160161 line 30 self.cols.remove(col)
15:30:59.160161 line 31 self.pie.remove(row&#43;col)
15:30:59.161159 line 32 self.na.remove(row-col)
15:30:59.161159 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.161159 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.161159 line 22 self.cols.add(col)
15:30:59.161159 line 23 self.pie.add(row&#43;col)
15:30:59.161159 line 24 self.na.add(row-col)
15:30:59.161159 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [0, 3]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 2
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.161159 call 12 def dfs(self, n, row, cur_state):
15:30:59.162158 line 13 if row >&#61; n:
15:30:59.164157 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.164157 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.165156 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.165156 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.165156 line 22 self.cols.add(col)
15:30:59.165156 line 23 self.pie.add(row&#43;col)
15:30:59.166156 line 24 self.na.add(row-col)
15:30:59.166156 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [0, 3, 1]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 3
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.166156 call 12 def dfs(self, n, row, cur_state):
15:30:59.166156 line 13 if row >&#61; n:
15:30:59.166156 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.166156 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.166156 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.166156 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.166156 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.166156 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.166156 line 20 continue
15:30:59.166156 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.166156 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.167155 line 17 for col in range(n):
15:30:59.167155 return 17 for col in range(n):
Return value:.. None
15:30:59.167155 line 30 self.cols.remove(col)
15:30:59.167155 line 31 self.pie.remove(row&#43;col)
15:30:59.167155 line 32 self.na.remove(row-col)
15:30:59.167155 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.167155 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.167155 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.167155 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.167155 line 17 for col in range(n):
15:30:59.167155 return 17 for col in range(n):
Return value:.. None
15:30:59.167155 line 30 self.cols.remove(col)
15:30:59.167155 line 31 self.pie.remove(row&#43;col)
15:30:59.167155 line 32 self.na.remove(row-col)
15:30:59.167155 line 17 for col in range(n):
15:30:59.167155 return 17 for col in range(n):
Return value:.. None
15:30:59.167155 line 30 self.cols.remove(col)
15:30:59.167155 line 31 self.pie.remove(row&#43;col)
15:30:59.167155 line 32 self.na.remove(row-col)
15:30:59.167155 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.168154 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.168154 line 22 self.cols.add(col)
15:30:59.168154 line 23 self.pie.add(row&#43;col)
15:30:59.168154 line 24 self.na.add(row-col)
15:30:59.168154 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [1]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 1
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.168154 call 12 def dfs(self, n, row, cur_state):
15:30:59.168154 line 13 if row >&#61; n:
15:30:59.168154 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.168154 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.168154 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.168154 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.168154 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.168154 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.168154 line 20 continue
15:30:59.169153 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.169153 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.169153 line 22 self.cols.add(col)
15:30:59.169153 line 23 self.pie.add(row&#43;col)
15:30:59.169153 line 24 self.na.add(row-col)
15:30:59.169153 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [1, 3]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 2
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.169153 call 12 def dfs(self, n, row, cur_state):
15:30:59.169153 line 13 if row >&#61; n:
15:30:59.169153 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.169153 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.169153 line 22 self.cols.add(col)
15:30:59.169153 line 23 self.pie.add(row&#43;col)
15:30:59.169153 line 24 self.na.add(row-col)
15:30:59.169153 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [1, 3, 0]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 3
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.169153 call 12 def dfs(self, n, row, cur_state):
15:30:59.169153 line 13 if row >&#61; n:
15:30:59.169153 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.169153 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.169153 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.170152 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.170152 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.170152 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.170152 line 22 self.cols.add(col)
15:30:59.170152 line 23 self.pie.add(row&#43;col)
15:30:59.170152 line 24 self.na.add(row-col)
15:30:59.170152 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [1, 3, 0, 2]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 4
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.170152 call 12 def dfs(self, n, row, cur_state):
15:30:59.170152 line 13 if row >&#61; n:
15:30:59.171153 line 14 self.res.append(cur_state)
15:30:59.171153 line 15 return
15:30:59.171153 return 15 return
Return value:.. None
15:30:59.171153 line 30 self.cols.remove(col)
15:30:59.171153 line 31 self.pie.remove(row&#43;col)
15:30:59.171153 line 32 self.na.remove(row-col)
15:30:59.171153 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.171153 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.172152 line 17 for col in range(n):
15:30:59.172152 return 17 for col in range(n):
Return value:.. None
15:30:59.173155 line 30 self.cols.remove(col)
15:30:59.174151 line 31 self.pie.remove(row&#43;col)
15:30:59.174151 line 32 self.na.remove(row-col)
15:30:59.174151 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.174151 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.174151 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.175157 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.175157 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.175157 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.175157 line 17 for col in range(n):
15:30:59.175157 return 17 for col in range(n):
Return value:.. None
15:30:59.175157 line 30 self.cols.remove(col)
15:30:59.175157 line 31 self.pie.remove(row&#43;col)
15:30:59.175157 line 32 self.na.remove(row-col)
15:30:59.176155 line 17 for col in range(n):
15:30:59.176155 return 17 for col in range(n):
Return value:.. None
15:30:59.176155 line 30 self.cols.remove(col)
15:30:59.176155 line 31 self.pie.remove(row&#43;col)
15:30:59.177149 line 32 self.na.remove(row-col)
15:30:59.177149 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.177149 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.177149 line 22 self.cols.add(col)
15:30:59.177149 line 23 self.pie.add(row&#43;col)
15:30:59.177149 line 24 self.na.add(row-col)
15:30:59.177149 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [2]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 1
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.178148 call 12 def dfs(self, n, row, cur_state):
15:30:59.178148 line 13 if row >&#61; n:
15:30:59.178148 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.178148 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.178148 line 22 self.cols.add(col)
15:30:59.178148 line 23 self.pie.add(row&#43;col)
15:30:59.178148 line 24 self.na.add(row-col)
15:30:59.178148 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [2, 0]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 2
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.178148 call 12 def dfs(self, n, row, cur_state):
15:30:59.178148 line 13 if row >&#61; n:
15:30:59.178148 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.178148 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.178148 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.178148 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.178148 line 20 continue
15:30:59.178148 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.178148 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.178148 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.179151 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.179151 line 22 self.cols.add(col)
15:30:59.179151 line 23 self.pie.add(row&#43;col)
15:30:59.179151 line 24 self.na.add(row-col)
15:30:59.179151 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [2, 0, 3]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 3
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.179151 call 12 def dfs(self, n, row, cur_state):
15:30:59.179151 line 13 if row >&#61; n:
15:30:59.179151 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.179151 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.179151 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.179151 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.180147 line 22 self.cols.add(col)
15:30:59.180147 line 23 self.pie.add(row&#43;col)
15:30:59.180147 line 24 self.na.add(row-col)
15:30:59.180147 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [2, 0, 3, 1]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 4
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.180147 call 12 def dfs(self, n, row, cur_state):
15:30:59.180147 line 13 if row >&#61; n:
15:30:59.180147 line 14 self.res.append(cur_state)
15:30:59.180147 line 15 return
15:30:59.180147 return 15 return
Return value:.. None
15:30:59.180147 line 30 self.cols.remove(col)
15:30:59.180147 line 31 self.pie.remove(row&#43;col)
15:30:59.180147 line 32 self.na.remove(row-col)
15:30:59.180147 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.180147 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.180147 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.180147 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.180147 line 17 for col in range(n):
15:30:59.180147 return 17 for col in range(n):
Return value:.. None
15:30:59.180147 line 30 self.cols.remove(col)
15:30:59.181146 line 31 self.pie.remove(row&#43;col)
15:30:59.181146 line 32 self.na.remove(row-col)
15:30:59.181146 line 17 for col in range(n):
15:30:59.181146 return 17 for col in range(n):
Return value:.. None
15:30:59.181146 line 30 self.cols.remove(col)
15:30:59.181146 line 31 self.pie.remove(row&#43;col)
15:30:59.181146 line 32 self.na.remove(row-col)
15:30:59.181146 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.181146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.181146 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.181146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.181146 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.181146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.181146 line 20 continue
15:30:59.181146 line 17 for col in range(n):
15:30:59.181146 return 17 for col in range(n):
Return value:.. None
15:30:59.181146 line 30 self.cols.remove(col)
15:30:59.181146 line 31 self.pie.remove(row&#43;col)
15:30:59.181146 line 32 self.na.remove(row-col)
15:30:59.181146 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.181146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.181146 line 22 self.cols.add(col)
15:30:59.182145 line 23 self.pie.add(row&#43;col)
15:30:59.182145 line 24 self.na.add(row-col)
15:30:59.182145 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [3]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 1
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.182145 call 12 def dfs(self, n, row, cur_state):
15:30:59.182145 line 13 if row >&#61; n:
15:30:59.182145 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.182145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.182145 line 22 self.cols.add(col)
15:30:59.182145 line 23 self.pie.add(row&#43;col)
15:30:59.182145 line 24 self.na.add(row-col)
15:30:59.182145 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [3, 0]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 2
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.182145 call 12 def dfs(self, n, row, cur_state):
15:30:59.182145 line 13 if row >&#61; n:
15:30:59.182145 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.182145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.182145 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.182145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.182145 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.182145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.183145 line 22 self.cols.add(col)
15:30:59.183145 line 23 self.pie.add(row&#43;col)
15:30:59.183145 line 24 self.na.add(row-col)
15:30:59.183145 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [3, 0, 2]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 3
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.183145 call 12 def dfs(self, n, row, cur_state):
15:30:59.183145 line 13 if row >&#61; n:
15:30:59.183145 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.183145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.183145 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.183145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.183145 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.183145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.183145 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.183145 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.183145 line 17 for col in range(n):
15:30:59.183145 return 17 for col in range(n):
Return value:.. None
15:30:59.183145 line 30 self.cols.remove(col)
15:30:59.183145 line 31 self.pie.remove(row&#43;col)
15:30:59.183145 line 32 self.na.remove(row-col)
15:30:59.184143 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.184143 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.184143 line 17 for col in range(n):
15:30:59.184143 return 17 for col in range(n):
Return value:.. None
15:30:59.184143 line 30 self.cols.remove(col)
15:30:59.184143 line 31 self.pie.remove(row&#43;col)
15:30:59.184143 line 32 self.na.remove(row-col)
15:30:59.184143 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.184143 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.184143 line 22 self.cols.add(col)
15:30:59.184143 line 23 self.pie.add(row&#43;col)
15:30:59.185146 line 24 self.na.add(row-col)
15:30:59.185146 line 26 self.dfs(n, row&#43;1, cur_state&#43;[col])
Starting var:.. cur_state &#61; [3, 1]
Starting var:.. n &#61; 4
Starting var:.. row &#61; 2
Starting var:.. self &#61; <__main__.Solution object at 0x000001A12C18A8D0>
15:30:59.185146 call 12 def dfs(self, n, row, cur_state):
15:30:59.185146 line 13 if row >&#61; n:
15:30:59.185146 line 17 for col in range(n):
New var:....... col &#61; 0
15:30:59.185146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.185146 line 17 for col in range(n):
Modified var:.. col &#61; 1
15:30:59.185146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.185146 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.185146 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.185146 line 20 continue
15:30:59.185146 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.186143 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.186143 line 17 for col in range(n):
15:30:59.186143 return 17 for col in range(n):
Return value:.. None
15:30:59.186143 line 30 self.cols.remove(col)
15:30:59.186143 line 31 self.pie.remove(row&#43;col)
15:30:59.186143 line 32 self.na.remove(row-col)
15:30:59.186143 line 17 for col in range(n):
Modified var:.. col &#61; 2
15:30:59.186143 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.186143 line 17 for col in range(n):
Modified var:.. col &#61; 3
15:30:59.186143 line 18 if col in self.cols or col &#43; row in self.pie or row-col in self.na:
15:30:59.186143 line 17 for col in range(n):
15:30:59.186143 return 17 for col in range(n):
Return value:.. None
15:30:59.186143 line 30 self.cols.remove(col)
15:30:59.186143 line 31 self.pie.remove(row&#43;col)
15:30:59.186143 line 32 self.na.remove(row-col)
15:30:59.187142 line 17 for col in range(n):
15:30:59.187142 return 17 for col in range(n):
Return value:.. None

更简洁的代码

class Solution:def solveNQueens(self, n):import pysnooper&#64;pysnooper.snoop()def dfs(curt, pie, na):&#39;&#39;&#39;curt:一维列表第i个元素代表棋盘第i行第curt[i]个位置放着皇后,同时表示第curt[i]列不安全pie: row&#43;col&#xff0c;表示/方向不安全na: row-col, 表示\方向不安全&#39;&#39;&#39;row &#61; len(curt)if row &#61;&#61; n:res.append(curt)returnfor col in range(n):if col not in curt and row&#43;col not in pie and row-col not in na:
# 如果当前位置安全,则放置皇后,添加皇后的攻击范围dfs(curt&#43;[col], pie&#43;[row&#43;col], na&#43;[row-col])
# 这里不能用curt.append(col)&#xff0c;因为list.append没有返回值&#xff0c;也就是说返回的None&#xff0c;会导致下面调用出错res &#61; []dfs([], [], [])return [[&#39;.&#39;*i &#43; &#39;Q&#39; &#43; &#39;.&#39;*(n-i-1) for i in j] for j in res]


推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
author-avatar
梦鸢蝶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有