N王后问题,是一个科学谜题,指的是在把N个王后放到N*N的棋盘上,结果是任何王后之间都不会彼此威胁。换句话说,每个后继的王后既不能与前面的王后在同一行、同一列,也不能位于同一对角线上。N王后问题给出了Python代码。下面是JavaScript代码,但结果有些误差,不知何故。
function conflict(state,posX) {
var posY = state.length;
for (var i=0;i<posY ;i++ )
{
var differ = Math.abs(state[i]-posX);
if (differ == 0 || differ == (posY - i))
{
return true;
}
}
return false;
}
function queens(num,state,solutions){
for (var x=0;x<num ;x++ )
{
if (!conflict(state,x))
{
if (state.length == (num-1))
{
solutions.unshift(x);
return true;
}
var result = queens(num,state.concat(x),solutions);
if (result)
{
if (state.length==0)
{
solutions.unshift(x);
continue;
}
solutions.unshift(x);
return true;
}
}
}
}
用法如下:
var result = [];
queens(4,[],result);
console.log(result);// [3, 1, 0, 2, 2, 0, 3, 1, 1, 3, 0, 2, 0, 3, 1, 2]
今天干脆把博客升级了一下,最新版——2.7。
备份、上传,一切顺利。但是,访问主域名时居然空白!再访问登录页面,发现有提示“数据库需要升级”——不会吧,难不成要升级租用服务器上的MySql?不管那么多了,不是有个“升级”按钮嘛,直接点击——呵呵,“数据库已经升级成功!”
噢,原来是wordpress的数据库结构有变化呀!虚惊一场。这下再访问主域名,OK。
试用了一下,感觉比原来的2.2版好用多了。 没看发版声明,就凭试用总结几点:
- 与服务器交互更像是“桌面应用程序” 了,页面不必频繁刷新——用户体验不错。
- 可以直接在发表文章时编辑“固定链接”——非常直观。
- HTML源代码发表模式对标记的兼容性更好——更健壮了。
- 其他……
顺便列几本wordpress图书吧。可惜的是,WordPress这么流行的CMS系统,国内居然没有引进、出版一本书。
所谓CDN(Content Delivery Network,内容分发网络),就是一组Web服务器的集合,其中的服务器分布于不同的地点,从而能够就近将内容更有效地分发给用户。有关使用CDN的优点可以参考“构建高性能网站的14条法则:使用CDN”。
Google:
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js” mce_src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js”></script>
AOL:
<script type=”text/javascript” src=”http://o.aolcdn.com/dojo/1.2/dojo/dojo.xd.js” mce_src=”http://o.aolcdn.com/dojo/1.2/dojo/dojo.xd.js”></script>
Google:
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/dojo/1.2/dojo/dojo.xd.js” mce_src=”http://ajax.googleapis.com/ajax/libs/dojo/1.2/dojo/dojo.xd.js”></script>
CacheFly:
<script type=”text/javascript” src=”http://extjs.cachefly.net/builds/ext-cdn-19.js”></script>
<link rel=”stylesheet” type=”text/css” href=”http://extjs.cachefly.net/ext-2.2/resources/css/ext-all.css” />
?
关于N王后问题
模块代码:
#nqueens.py
#coding=UTF-8
# n王后问题解决方案
# 检查当前王后位置(可能是多个)与下一个王后位置是否冲突
def conflict(state,posX):
posY = len(state)
for i in range(posY):
if abs(state[i]-posX) in (0,posY-i):
return True
return False
# 采用回溯递归算法,结合生成器特性,计算可能的解决方案
def find(num=4,state=()):
for pos in range(num):
if not conflict(state,pos):
if len(state)==num-1:
yield (pos,)
else:
for result in find(num,state+(pos,)):
yield (pos,)+result
# 形象地表示每个解决方案
def show(solutions):
def printSolution(index,solution):
print "\n方案"+str(index)+" "+str(solution)+"\n"
for pos in solution:
length=len(solution)
print ". "*(pos)+"Q "+". "*(length-pos-1)+"("+str(pos)+")"
list_solutions = list(solutions)
if not len(list_solutions)==0:
enum_solutions = enumerate(list_solutions)
n_solutions = len(list_solutions)
n_queens = len(list_solutions[0])
print str(n_queens)+"王后问题有"+str(n_solutions)+"种方案:"
for index,solution in enum_solutions:
printSolution(index+1,solution)
# 调用方法:
# nqueens.show(nqueens.find())
# 或
# nqueens.show(nqueens.find(5))
将以上代码复制到nqueens.py中,把nqueens.py保存在“你的路径”下。
查看全文 »