pengcc 发表于 2013-2-5 02:12:51

八皇后问题的C语言实现

西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。
 
解法

关于棋盘的问题,都可以用递回求解,然而如何减少递回的次数?在八个皇后的问题中,不必要所有的格子都检查过,例如若某列检查过,该该列的其它格子就不用再检查了,这个方法称为分支修剪。
<div style="text-align: left;">

                                                      http://dl.iteye.com/upload/attachment/272720/25227d30-a24e-34d1-ba8b-99ad3bce4b3f.jpg
 

所以检查时,先判断是否在已放置皇后的可行进方向上,如果没有再行放置下一个皇后,如此就可大大减少递回的次数,例如以下为修剪过后的递回检查行进路径:

http://dl.iteye.com/upload/attachment/272722/5df0e427-07e7-3866-9d99-cc860fbf067b.jpg
 
<div style="text-align: left;">
八个皇后的话,会有92个解答,如果考虑棋盘的旋转,则旋转后扣去对称的,会有12组基本解。
页: [1]
查看完整版本: 八皇后问题的C语言实现