穷举法php,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

$arr = $tmp[$i];

echo $str=<<

{$arr[0]}{$arr[1]}{$arr[2]}
{$arr[3]}{$arr[4]}{$arr[5]}
{$arr[6]}{$arr[7]}{$arr[8]}

fs;

}

echo '

共花费时间:';

echo round($endTime - $startTime, 3);

echo '秒';

die;

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值