四.运行结果
史上最详细的八个皇后算法解析【php版本】
题目:
八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。
一.题目解析:
每个可以放置的位置需满足的要求:
1)所在行都没有放置过;
2)所在列都没有放置过;
3)从左上到右下的对角线没有放置过;
4)从右上到左下的对角线没有放置过。
二.数学建模
1)建立坐标系,
2)设放置坐标为(a,b),则需要满足下面是数学关系。
1.行row[a]=1(表示第a行没有放置过,0则表示第a行已被放置);
2.列col[b]=1(表示第b列没有放置过,0则表示第b列已被放置);
对角线的要做一下运算:
观察可知,设过(a,b)的曲线上还有点(x,y),
3.从左上到右下的对角线(设为主对角线)斜率为-1:
则有(y-b)/(x-a)=-1,整理得到如下关系:y+x=a+b。
因此可以用a+b来标记过(a,b) 的主对角线,a+b的范围是[2,16],即用2-16的数字标记从过(1,1)到过(8,8)这15条对角线;
4.从右上到左下的对角线(设为次对角线)斜率为1:
则有(y-b)/(x-a)=1,整理得到如下关系:x-y=a-b;
因此可以用a-b来标记过(a,b) 的次对角线,a-b的范围是[-7,7];
3)放置过程
从第1摆至第8行,每行摆一个,则第二步的第一条件可以忽略(肯定不同行)。
下面假设一下摆放步骤,也就是回溯法的一个例子:
Q * * * * * * *
* * Q * * * * *
* * * * Q * * *
* Q * * * * * *
* * * * * * * Q
* * * * * * * *
* * * * * * * *
* * * * * * * *
从第一行的(1,1)开始摆,第二行检测第二步的三个条件,假设放置到(2,3),第三行放置到(3,5),第四行(4,2),第五行(5,8)发现第五行已经找不到满足条件的坐标了,这时候就要退回第四行,发现第四行已经到行尾了,没有位置可选了,这时候就得退回第3行,在第三行找到(4,7)符合条件,又开始了往下摆放的过程,直到到达第八行找到八个可以摆放的位置,则为一个解。
三.程序实现
注:为了便于程序中用数组对对角线的标注,针对第i行第j列的坐标,其改坐标的主对角线为$this->rup[$i+$j]=1,表示该对角线未占用,次对角线为$this->lup[$i-$j+8]=1(数组的下标不能为负,而$i-$j可能为负),表示该对角线未占用,$this->column[$j]=1,表示该列未占用。
代码如下:
<?php /*** function:解决八个皇后的问题* author:xiaojun* date:2015-5-16*/class Queen { private $column= array();//存放列是否占有标记,0为占有 private $rup= array();//存放主对角线是否占有,0为占有 private $lup= array();//存放次对角线是否占有,0为占有 private $queen= array();//存放解中皇后的位置 private $num; //解的编号 function __construct() { for($i=1;$i<=8;$i++){ $this->column[$i]=1; } for($i=1;$irup[$i]=$this->lup[$i]=1; } public function backtrack($i){//i从上往下 if($i>8){ $this->showAnswer(); }else{ for($j=1;$jcolumn[$j]==1)&&($this->rup[$i+$j]==1)&&($this->lup[$i-$j+8]==1)){ $this->queen[$i]=$j; //设定为占用 $this->column[$j]=$this->rup[$i+$j]=$this->lup[$i-$j+8]=0; $this->backtrack($i+1); $this->column[$j]=$this->rup[$i+$j]=$this->lup[$i-$j+8]=1; } } } } protected function showAnswer(){ $this->num++; print("解答"); print($this->num); echo "<br>"; for($y=1;$yqueen[$y]==$x){ print("Q"); }else{ print(" * "); } } print("<br>"); } print("<br>"); }}$queen=new Queen();$queen->backtrack(1);?>
四.运行结果
..........
.........

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

第1部分:初始故障排除步骤检查苹果的系统状态:在深入研究复杂的解决方案之前,让我们从基础知识开始。问题可能不在于您的设备;苹果的服务器可能会关闭。访问Apple的系统状态页面,查看AppStore是否正常工作。如果有问题,您所能做的就是等待Apple修复它。检查您的互联网连接:确保您拥有稳定的互联网连接,因为“无法连接到AppStore”问题有时可归因于连接不良。尝试在Wi-Fi和移动数据之间切换或重置网络设置(“常规”>“重置”>“重置网络设置”>设置)。更新您的iOS版本:

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

本篇文章带大家解读vue源码,来介绍一下Vue2中为什么可以使用 this 访问各种选项中的属性,希望对大家有所帮助!

同事因为this指向的问题卡住的bug,vue2的this指向问题,使用了箭头函数,导致拿不到对应的props。当我给他介绍的时候他竟然不知道,随后也刻意的看了一下前端交流群,至今最起码还有70%以上的前端程序员搞不明白,今天给大家分享一下this指向,如果啥都没学会,请给我一个大嘴巴子。

watch4pro和gt各自具有不用的特点和适用场景,如果注重功能的全面性、高性能和时尚外观,同时愿意承担较高的价格,那么Watch 4 Pro可能更适合。如果对功能要求不高,更注重电池续航和价格的合理性,那么GT系列可能更适合。最终的选择应根据个人需求、预算和喜好来决定,建议在购买前仔细考虑自己的需求,并参考各种产品的评测和比较,以做出更明智的选择。

请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?那么请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?http://127.0.0.1/myo/newuser.php?mod=search&type=fastone比如现在我要修改mod=new要怎么做呢?------解决方案--------------------发送了请求
