Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > PHP > 用php解八皇后问题
【标  题】:用php解八皇后问题
【关键字】:php
【来  源】:http://www.cublog.cn/u/14321/showart.php?id=141830

用php解八皇后问题

Your Ad Here
八皇后问题是一个非常有趣的问题,是由德国大数学家高斯首先提出来的。要求在国际象棋的棋盘上放置八个皇后,使她们不能互相攻击,即任何两个皇后不能处在同一行、同一列、同一条斜线上。问有多少种不同的摆法?并找出所有的摆法。

问题分析:
(1)   满足上述条件的八个皇后,必然是每行一个,每列一个。
(2)   棋盘上任意一行、任意一列、任意一条斜线上都不能有两个皇后。
php代码:
class Queen{
    var 
$chess
//皇后位置
    
var $queens
//皇后数
    
var $result = array();
//正解

    
function Queen($queens
){
        
$this -> queens $queens
//棋盘大小 $queens x $queens
        
$this -> place(); 
//开始放置第0个皇后
    
}
    
//在第$n行放置皇后
    
function place($n=0
){
        if(
$n == $this -> queens){ 
//得到一个解
            
for($i $i $this -> queens $i++) $re[] = $this -> chess[$i]; 
//保存皇后位置
            
$this -> result[] = $re
;
            return;
        }
        for(
$i $i <= $this -> queens $i
++){
            
$this -> chess[$n] = $i
;
            if(
$this -> isOK($n)) $this -> place($n 1
); 
        }
    }
    
//判断位置是否有效
    
function isOK($n
){
        for(
$i $i $n $i
++){
            if(
$this -> chess[$i] == $this -> chess[$n] || abs($this -> chess[$i] - $this -> chess[$n]) == ($n $i)) return 0
;
        }
        return 
1
;
    }
    function 
getResult
(){
        return 
$this -> result

    }
}

测试:
$queen = new Queen(8);
$re $queen->getResult
();
//输出
$k=0
;
foreach(
$re as $v
) {
    echo 
"输出第".++$k."个结果:<br>"
;
    echo 
"<table border=0 cellspacing=1 cellpadding=0 bgcolor=#000000 style='padding:5px;'>"
;
        foreach(
$v as $row
){
            echo 
"<tr align='center'>"
;
            for(
$i=1;$i<=count($v);$i
++) {
                if(
$row == $i) echo "<td bgcolor=#ffffff width='20' style='color:red;font-weight:bold;'>Q</td>"
;
                else echo 
"<td bgcolor=#ffffff width='20'>&nbsp;</td>"
;
            }
            echo 
"</tr>"
;
        }    
        echo 
"</table><br>"
;
}

当n=8时,共有92种解法,其中部分结果如下:

输出第1个结果:

Q              
        Q      
              Q
          Q    
    Q          
            Q  
  Q            
      Q        

输出第2个结果:
Q              
          Q    
              Q
    Q          
            Q  
      Q        
  Q            
        Q      

输出第3个结果:
Q              
            Q  
      Q        
          Q    
              Q
  Q            
        Q      
    Q          

各位朋友有兴趣也可以将皇后改成骑士(马),马的控制范围为直走两格,横走一格,即"日"字形..

FTP操作类( 上传、拷贝、移动、删除文件/创建目录 ):【上一篇】
一些数据结构算法,不断补充:【下一篇】
【相关文章】
  • 学PHP的初步感想(一)
  • 使用PHP的日期与时间函数提高开发技巧
  • 用PHP文件函数获得重要的文件信息
  • 用PHP控制FTP文件上传
  • 在php中随机生成密码字串
  • PHP重定向
  • FC4: Snort+mysql+Apache(with mod_ssl)+php+ACID安装日志
  • apache 2.2.2 + PHP5.1.* 不能运行的解决办法
  • php+apache
  • Web站点快速开发的不二之选——PHP
  • 【随机文章】
  • 使用杀毒软件的五大禁忌
  • 由朗讯的一道笔试题想到的!
  • oracle-内存表
  • 高效awk编程第3版 $3 读入文件
  • 在线备份服务费用需精打细算
  • html的特效
  • PhotoImpact 10 视频教程-3D平台文字
  • Netbeans 5.5Beta 发布信息
  • 如何删除重复记录zt
  • 如何在JSP中添加自己的Tag
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.