【算法总结-回溯法】回溯与八皇后
2011-11-01 11:21
218 查看
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title> test </title> </head> <body> <div> <?php /*八皇后问题代码实现 * * * */ //根据前几行的放置情况,判断这一行是否合法 function attack($n){ global $chess; for($i=1;$i<=$n-1;$i++){ if($chess[$n]==$chess[$i]+($n-$i)||$chess[$n]==$chess[$i]-($n-$i)||$chess[$n]==$chess[$i]){ return true; } } return false; } //输出每种可能的解 function display(){ global $chess; global $solution; echo " solution".sprintf("% 2d",$solution).":"; for($i=1;$i<=8;$i++){ $img = "<img src='../images/$chess[$i].png'/>"; echo $img; } echo "</br>"; $solution++; } //递归放置皇后 function putchess($n){ global $chess; global $solution; for($i=1;$i<=8;$i++){ $chess[$n] =$i; if(!attack($n)){//没有冲突 if($n==8){//已经放满,输出 display(); } else{ putchess($n+1); } }//if }//for } printf("八皇后问题的解如下:<br/>"); $solution = 1; //$chess=array(1,2,3,4,5,6,7,8); putchess(1); echo "共有".($solution-1)."种不同的八皇后放置方法"; ?> </div> </body> </html>
效果图:
python版本的解法如下:
def conflict(state,nextX): nextY = len(state) for i in range(nextY): if(abs(state[i]-nextX)) in (0,nextY-i): return True return False def queens(num = 8,state = ()): for pos in range(num): if not conflict(state,pos): if len(state) == num-1: yield (pos,) else: for result in queens(num,state+(pos,)): yield (pos,)+result def prettyprint(solution): def line(pos,length = len(solution)): return '. '*(pos) +'X '+'. '*(length-pos-1) for pos in solution: print line(pos) import random prettyprint(random.choice(list(queens(8)))) print len(list(queens(8)))
结果:
. . X . . . . . . . . . X . . . . . . . . . X . X . . . . . . . . . . X . . . . . X . . . . . . . . . . . . . X . . . . . X . . 92
相关文章推荐
- 回溯算法————n皇后、素数串
- 回溯算法总结
- 算法学习:回溯解决4皇后问题
- 回溯算法 8皇后问题的一种解法 适合初学者观察整个回溯的过程
- 回溯算法-8皇后问题
- 回溯算法-8皇后
- 回溯算法——算法总结(四)
- lv 算法与回溯法相结合解决n皇后问题
- 国际象棋“皇后”问题的回溯算法
- N皇后问题 算法 回溯法
- 回溯算法——算法总结(四)
- 回溯算法之N皇后问题
- JAVA使用回溯法解决n皇后问题的算法
- 算法试验8皇后问题-回溯法 PS参考了百度的一些大神的思路
- 算法——回溯法(子集、全排列、皇后问题)
- 算法-回溯法初探-n皇后问题
- 回溯法算法步骤&n皇后问题的详细程序(C++)
- “皇后”问题的回溯算法
- 拉斯维加斯算法和回溯法在n皇后问题上的应用
- 国际象棋“皇后”问题的回溯算法