关于九宫格算法的代码

php中文网
发布: 2016-06-23 13:26:39
原创
1169人浏览过


<?phpignore_user_abort(true);set_time_limit(0);$tmp = array();function getArr($arr='') {    for ($i = 0; $i <= 11; $i++) {        $arr[] = $i;          if (count($arr) < 8) {            getArr($arr);        }                if ( count($arr) < 8 && count($arr) > 1 ) {                array_pop($arr);                continue;            } elseif ( count($arr) == 1 ) {                unset($arr);                continue;            } elseif ( checkArr($arr) ) {                $GLOBALS['tmp'][] = $arr;            }    }}function checkArr($arr){    $m = array();    $val = 4;    if ($val == $arr[0] + $arr[1] - 9){        $m[] = $arr[0] + $arr[1] - 9;    }        if ($val == $arr[2] - $arr[3] * $arr[4]) {        $m[] = $arr[2] - $arr[3] * $arr[4];    }        if ($val == $arr[5] + $arr[6] - $arr[7]) {        $m[] = $arr[5] + $arr[6] - $arr[7];    }    if ($arr[5] != 0) {        if ($val == $arr[0] + $arr[2] / $arr[5]) {            $m[] = $arr[0] + $arr[2] / $arr[5];        }    }    if ($val == $arr[1] - $arr[3] * $arr[6]) {        $m[] = $arr[1] - $arr[3] * $arr[6];    }    if ($val == 9 - $arr[4] - $arr[7]) {        $m[] = 9 - $arr[4] - $arr[7];    }    $tmp = array_count_values($m);    foreach ($tmp as $v) {        if ( $v == 6 ) {            return true;        } else {            return false;        }    }}$startTime = microtime(true);getArr();$endTime = microtime(true);for( $i=0; $i<count($tmp); $i++ ) {$arr = $tmp[$i];echo $str=<<<fs    <table border="1" style="float:left;margin-left:10px;">        <tr>            <td>{$arr[0]}</td>            <td>{$arr[1]}</td>            <td>9</td>        </tr>        <tr>            <td>{$arr[2]}</td>            <td>{$arr[3]}</td>            <td>{$arr[4]}</td>        </tr>        <tr>            <td>{$arr[5]}</td>            <td>{$arr[6]}</td>            <td>{$arr[7]}</td>        </tr>    </table>fs;}echo '<div style="float:left;width:100%;height:5px;clear:both"></div><h1 style="float:left">共花费时间:';echo round($endTime - $startTime, 3);echo '秒</h1>';die;
登录后复制

仿照网上九宫格穷举代码,结果死循环的,请各位看看。

腾讯云AI代码助手
腾讯云AI代码助手

基于混元代码大模型的AI辅助编码工具

腾讯云AI代码助手 98
查看详情 腾讯云AI代码助手

回复讨论(解决方案)

ignore_user_abort(true);set_time_limit(0);$tmp = array();function getArr($arr=''){    for ($i = 1; $i <= 9; $i++) {        if ( empty($arr) ) {            $arr[] = $i;        } elseif ( in_array($i, $arr) ) {            continue;        } else {            $arr[] = $i;        }        if ( count($arr) < 9 ) {            getArr($arr);        }        if ( count($arr) < 9 && count($arr) > 1 ) {            array_pop($arr);            continue;        } elseif ( count($arr) == 1 ) {            unset($arr);            continue;        } elseif ( checkArr($arr) ) {            $GLOBALS['tmp'][] = $arr;        }    }}function checkArr($arr){    $m = array();    $m[] = $arr[0] + $arr[1] + $arr[2];    $m[] = $arr[3] + $arr[4] + $arr[5];    $m[] = $arr[6] + $arr[7] + $arr[8];    $m[] = $arr[0] + $arr[3] + $arr[6];    $m[] = $arr[1] + $arr[4] + $arr[7];    $m[] = $arr[2] + $arr[5] + $arr[8];    $m[] = $arr[0] + $arr[4] + $arr[8];    $m[] = $arr[2] + $arr[4] + $arr[6];    $tmp = array_count_values($m);    foreach ($tmp as $v) {        if ( $v == 8 ) {            return true;        } else {            return false;        }    }}$startTime = microtime(true);getArr();$endTime = microtime(true);for( $i=0; $i<count($tmp); $i++ ) {$arr = $tmp[$i];echo $str=<<<fs    <table border="1" style="float:left;margin-left:10px;">        <tr>            <td>{$arr[0]}</td>            <td>{$arr[1]}</td>            <td>{$arr[2]}</td>        </tr>        <tr>            <td>{$arr[3]}</td>            <td>{$arr[4]}</td>            <td>{$arr[5]}</td>        </tr>        <tr>            <td>{$arr[6]}</td>            <td>{$arr[7]}</td>            <td>{$arr[8]}</td>        </tr>    </table>fs;}echo '<div style="float:left;width:100%;height:5px;clear:both"></div><h1 style="float:left">共花费时间:';echo round($endTime - $startTime, 3);echo '秒</h1>';die;//该片段来自于http://outofmemory.cn
登录后复制

这是网上的例子。

<?phpset_time_limit(300);print_r(test());function test(){    $ret = array();    for($a=0; $a<12; $a++){        for($b=0; $b<12; $b++){            for($c=0; $c<12; $c++){                for($d=0; $d<12; $d++){                    for($e=0; $e<12; $e++){                        for($f=1; $f<12; $f++){                            for($g=0; $g<12; $g++){                                for($h=0; $h<12; $h++){                                    if($a+$b-9==4 && $c-$d*$e==4 && $f+$g-$h==4 && $a+$c/$f==4 && $b-$d*$g==4 && 9-$e-$h==4){                                        return array(                                                'a' => $a,                                                'b' => $b,                                                'c' => $c,                                                'd' => $d,                                                'e' => $e,                                                'f' => $f,                                                'g' => $g,                                                'h' => $h                                            );                                    }                                }                            }                        }                    }                }            }        }    }    return $ret;}?>
登录后复制

Array ( [a] => 2 [b] => 11 [c] => 4 [d] => 1 [e] => 0 [f] => 2 [g] => 7 [h] => 5 )

计算量有点大。。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号