Home > php教程 > PHP源码 > php解八皇后以及多皇后问题。

php解八皇后以及多皇后问题。

PHP中文网
Release: 2016-05-25 17:10:41
Original
1021 people have browsed it

[PHP]代码  

<?php
function f($q, $f = false) { /* $f 是标记,如果为 false 将重新初始化 */
	static $c = 0; /* 计数器, 解个数 */
	static $l = array(); /* 当前皇后存在的列, 键名记录行 */
	static $n = 0; /* 当前皇后,从0计数,表示第一个 */ 

	/* BUG FIX 增设初始化内容,感谢 @曹林剑 发现此BUG */
	if(!$f) {
		$c = 0;
		$l = array();
		$n=0;
	}

	/* 尝试放入皇后 */
	for($l[$n] = 0; $l[$n] < $q; $l[$n]++) {
		/* 验证皇后是否可以放入*/
		for($i = 0; $i < $n;$i++) {
			/* 验证是否可放入,冲突直接跳出本次筛选 */
			if(($l[$i] == $l[$n] || $l[$i] - $l[$n] == $i - $n || $l[$i] - $l[$n] == $n - $i )) continue 2;
		}
		/* 验证通过,可以放置本次 */

		/* 如果没有达到最后一个 */
		if($n < ($q - 1)) {
			$n++; /* 下一个皇后 */
			f($q, true); /* 第2个参数表示不会破坏内部存放数值*/
			$n--; /* 本层还有其他位置要验证, 还原后继续验证本层 */
		}
		/* 达到最后一个, 计数器+1 */
		else {
			$c++;
		}
	}
	return $c;
}

/* f(8); 可以返回 8 皇后解个数, 要想知道所有解, 可 在  "达到最后一个,计算器+1" 部分获取解详情。 */
Copy after login

                   

                   

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template