PHP穷举法列出三阶幻方(九宫格)的解
程序员文章站
2022-05-01 23:44:43
...
<?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;
下一篇: jquery判断复选框是否被选中的方法