python示例,在代码中修改MAX的值,可求解N皇后问题。
MAX = 8 queen = [0] * MAX * MAX valid = [0] * MAX count = 1 def putQueen(row): global count for i in xrange(MAX): if queen[row*MAX + i] == 0: valid[row] = i mark = setMark(row, i) if row == MAX - 1: print count, valid count += 1 else: putQueen(row+1) unSetMark(mark) def setMark(row, col): """mark""" mark = [] for i in xrange(MAX): if queen[row*MAX + i] ==0: queen[row*MAX + i] = 1 mark.append((row, i)) for i in xrange(row, MAX): if queen[i*MAX + col] ==0: queen[i*MAX + col] = 1 mark.append((i, col)) r, c = row, col while r < MAX and c < MAX: if queen[r*MAX + c] == 0: queen[r*MAX + c] = 1 mark.append((r, c)) r += 1 c += 1 r, c = row, col while r < MAX and c >= 0: if queen[r*MAX + c] == 0: queen[r*MAX + c] = 1 mark.append((r, c)) r += 1 c -= 1 return mark def unSetMark(mark): for row, col in mark: queen[row*MAX + col] = 0 putQueen(0)