Heim > php教程 > PHP源码 > Hauptteil

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

PHP中文网
Freigeben: 2016-05-25 17:10:41
Original
958 Leute haben es durchsucht

[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" 部分获取解详情。 */
Nach dem Login kopieren

                   

                   

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!