function solveNQueens(n): solutions = [] board = [-1] * n # 用一维数组表示棋盘,index 表示行,值表示列 backtrack(board, 0, n, solutions) return solutions
function backtrack(board, row, n, solutions): if row == n: solutions.append(board[:]) return for col in range(n): if isSafe(board, row, col): board[row] = col backtrack(board, row + 1, n, solutions) board[row] = -1 # 回溯
function isSafe(board, row, col): for i in range(row): if board[i] == col or abs(board[i] - col) == abs(i - row): return False return True
function graphColoring(graph, m): color = [-1] * len(graph) if not backtrack(graph, m, color, 0): return False return color
function backtrack(graph, m, color, v): if v == len(graph): return True for c in range(1, m + 1): if isSafe(graph, color, v, c): color[v] = c if backtrack(graph, m, color, v + 1): return True color[v] = -1 # 回溯 return False
function isSafe(graph, color, v, c): for i in range(len(graph)): if graph[v][i] == 1 and color[i] == c: return False return True
defgraph_coloring(graph, m): n = len(graph) color = [-1] * n
defbacktrack(v): if v == n: returnTrue for c inrange(1, m + 1): if is_safe(v, c): color[v] = c if backtrack(v + 1): returnTrue color[v] = -1# 回溯 returnFalse
defis_safe(v, c): for i inrange(n): if graph[v][i] == 1and color[i] == c: returnFalse returnTrue
function subsets(nums): result = [] backtrack(nums, 0, [], result) return result
function backtrack(nums, start, path, result): result.append(path[:]) for i in range(start, len(nums)): path.append(nums[i]) backtrack(nums, i + 1, path, result) path.pop() # 回溯
示例代码(Python 实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
defsubsets(nums): result = []
defbacktrack(start, path): result.append(path[:]) for i inrange(start, len(nums)): path.append(nums[i]) backtrack(i + 1, path) path.pop() # 回溯