码迷,mamicode.com
首页 > 其他好文 > 详细

八皇后,回溯与递归

时间:2014-09-15 14:07:18      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   for   div   问题   sp   

  python语句的八皇后代码,摘自《Python基础教程》,代码相对于其他语言,来得短小且一次性可以打印出92种结果。同时可以扩展为九皇后,十皇后问题。

  问题:在一个8*8棋盘上,每一行放置一个皇后旗子,且它们不冲突。冲突定义:同一列不能有两个皇后,每一个对角线也不能有两个皇后。当然,三个皇后也是不行的,四个也是不行的,应该凭智商应该可以理解吧。

  

  解决方案:回溯法和递归法

 1 import random
 2 
 3 def conflict(state,col):
 4     row=len(state)
 5     for i in range(row):
 6         if abs(state[i]-col) in (0,row-i):
 7             return True
 8     return False
 9 
10 
11     
12 def queens(num=8,state=()):
13     for pos in range(num):
14         if not conflict(state, pos):
15             if len(state)==num-1:
16                 yield(pos,)
17             else:
18                 for result in queens(num, state+(pos,)):
19                     yield (pos,)+result
20 
21 
22 
23 def queenprint(solution):
24     def line(pos,length=len(solution)):
25         return . *(pos)+X +. *(length-pos-1)
26     for pos in solution:
27         print line(pos)
28         
29 
30 for solution in list(queens(8)):
31     print solution
32 print   total number is +str(len(list(queens())))
33 print   one of the range is:\n
34 queenprint(random.choice(list(queens())))

 

  介绍:

1.回溯法

2.递归法

待续

 

八皇后,回溯与递归

标签:style   blog   color   io   os   for   div   问题   sp   

原文地址:http://www.cnblogs.com/nima/p/3972593.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!