https://cn.bing.com/search?q=8+queens+92
1 # -*- coding: gbk -*- 2 # 把棋盘看成8根木条。判断斜线时滑动木条。 3 mask = list(map(lambda n:1<<n, range(15, 7, -1))) 4 b = 8 * [0]; cnt = 0 5 def print_brd(): 6 for y in range(8): 7 line = b[y] 8 for m in mask: print(' ' + ('Q' if line & m else '.'), end='') 9 print('') 10 def fighting(cy): # cy: current y 11 if cy == 0: return 0 12 r = range(cy) 13 for y in r: 14 if b[y] & b[cy]: return 1 15 if (b[y] << y) & (b[cy] << cy): return 1 16 if (b[y] >> y) & (b[cy] >> cy): return 1 17 return 0 18 def search(y): 19 global cnt 20 if y == 8: 21 cnt += 1 22 if cnt == 1: print_brd() 23 return 24 for x in range(8): 25 b[y] |= mask[x] 26 if not fighting(y): search(y + 1) 27 b[y] &= ~mask[x] 28 29 search(0); print('\n', cnt, 'solutions')
背包:
1 # -*- coding: gbk -*- 2 # 每件物品带个开关。1:放入背包,0:不放。 3 w = [ 5, 3, 7, 1] # weight of 物品 4 n = len(w) 5 m = list(map(lambda n:1<<n, range(n))) # mask 6 for bits in range(1 << n): 7 t = [] 8 for i in range(n): 9 if bits & i: t.append(w[i]) 10 print(t)
浙公网安备 33010602011771号