龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

PHP穷举法列出三阶幻方(九宫格)的解

时间:2014-07-14 15:18来源:网络整理 作者:网络 点击:
分享到:
PHP穷举法列出三阶幻方(九宫格)的解 [代码片段(79行)]
<?php

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
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接