紫气东来 | 2023-11-21 16:13:27 | 编程 | 0

php解决八皇后问题

今天去表弟家玩,他提到了八皇后摆放问题,我说直接用8个for循环镶套就可以解决,经过一番构思和测试,终于实现了输出八皇后位置。

因为每一行只能摆放一个皇后,所以我只求每个皇后的纵坐标。

代码分享如下,留下纪念下。

.
for($a=1;$a<9;$a++){
    $tmp[1]=$a;
for($b=1;$b<9;$b++){
        $tmp[2]=$b;
        if($b==$a){continue;}
    if(
        abs($b-$a)==1
    ){continue;}
for($c=1;$c<9;$c++){
    $tmp[3]=$c;
    if (in_array($c, array($a, $b))){
        continue;
    }
    if(
        abs($c-$b)==1||abs($c-$a)==2
    ){
        continue;
    }
for($d=1;$d<9;$d++){
        $tmp[4]=$d;
    if (in_array($d, array($a,$b,$c))){
        continue;
    }
    if (
    abs($d-$b)==2
    ||abs($d-$a)==3   
        ||abs($d-$c)==1
    ){
        continue;
    } 
for($e=1;$e<9;$e++){
        $tmp[5]=$e;
    if (in_array($e, array($a,$b,$c,$d))){
        continue;
    }
    if (
    abs($e-$b)==3
    ||abs($e-$a)==4
        ||abs($e-$c)==2
        ||abs($e-$d)==1
    ){
        continue;
    }
for($f=1;$f<9;$f++){
        $tmp[6]=$f;
    if (in_array($f, array($a,$b,$c,$d,$e))){
        continue;
    }
    if (
      abs($f-$b)==4
    ||abs($f-$a)==5
        ||abs($f-$c)==3
        ||abs($f-$d)==2
        ||abs($f-$e)==1
    
    ){
        continue;
    }
for($g=1;$g<9;$g++){
        $tmp[7]=$g;
    if (in_array($g, array($a,$b,$c,$d,$e,$f))){
        continue;
    }
    if (
abs($g-$b)==5
    ||abs($g-$a)==6
        ||abs($g-$c)==4
        ||abs($g-$d)==3
        ||abs($g-$e)==2
        ||abs($g-$f)==1
    ){
        continue;
    }      
for($h=1;$h<9;$h++){
        $tmp[8]=$h;
    if (in_array($h, array($a, $b,$c,$d,$e,$f,$g))){
        continue;
    }
    if (
      abs($h-$b)==6
    ||abs($h-$a)==7
        ||abs($h-$c)==5
        ||abs($h-$d)==4
        ||abs($h-$e)==3
        ||abs($h-$f)==2
        ||abs($h-$g)==1
    ){
        continue;
    }
        $xx[]=$tmp;
    }
    }
    }
}
}
}
}
}
print_r($xx);

上一篇:php路由转发
下一篇:svg图片链接

【最近更新】
免责声明
js生成怪物地图
svg图片链接
js生成游戏世界地图
js禁止加载图片
2024年9月
人生真正的需求
网址收藏
php动态属性赋值