hanyeah 专注于AS

解九连环

用代码解九连环。

先看效果:

获得 Adobe Flash Player

音频使用百度tts生成。

解九连环和汉诺塔类似,都是典型的递归。

九连环的规律是:

从右往左编号1-9,要想操作(解下或挂上)第n环,需要挂上第n-1环,摘下第n-2到第1环。

比如,第1环可以直接操作;要想操作第2环,需要挂上第1环;要想操作第3环,需要挂上第2环,摘下第1环;要想操作第4环,需要挂上第3环,摘下第2、第1环。以此类推。

规律有了,就可以用代码求解了。

比如,js代码如下:

Array.prototype.daoxu=function(){
	var a=[];
	for(var i=this.length-1;i>=0;i--){
		a.push(this[i]);
	}
	return a.join(",");
}
/*
console.log=function(s){
	document.write("<p>"+s+"</p>");
}
*/
var jiulianhuan=[1,1,1,1,1,1,1,1,1];
var nn=0;
console.log(jiulianhuan.daoxu());
for(var i=8;i>=0;i--){
	zhaixia(i);
}

function zhaixia(n){
	if(jiulianhuan[n]==1){
		if(n==0){
			nn++;
			jiulianhuan[n]=0;
			console.log(nn+":\t摘下"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
		else{
			guashang(n-1);
			for(var i=n-2;i>=0;i--){
				zhaixia(i);
			}
			nn++;
			jiulianhuan[n]=0;
			console.log(nn+":\t摘下"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
	}
}
function guashang(n){
	if(jiulianhuan[n]==0){
		if(n==0){
			nn++;
			jiulianhuan[n]=1;
			console.log(nn+":\t挂上"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
		else{
			guashang(n-1);
			for(var i=n-2;i>=0;i--){
				zhaixia(i);
			}
			nn++;
			jiulianhuan[n]=1;
			console.log(nn+":\t挂上"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
	}
}

as版源码,apk源码可下载附件查看。


源码打包下载

apk下载

2016年12月1日 | 发布:hanyeah | 分类:as3.0笔记 | 评论:0

发表留言: