`
李俊良
  • 浏览: 141167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

螺旋数组

 
阅读更多
function circleNumber(n){
	var re = [];
	
	/**
		1表示右
		2表示下
		3表示左
		4表示上
	*/
	var currentPos = 1;
	/**定义初始1的xy坐标*/
	var xy = null;
	var max = n * n;
	/**
		生成空数组
	*/
	function initMap(){
		for(var i= 0 ; i < n ; i++){
			var tmp = [];
			for(var j = 0 ; j < n ; j++ ){
				tmp.push(0);
			}
			re.push(tmp);
		}
	}
	
	/**
		找到1的位置
	*/
	function firstPos(){
		if(n%2 == 1){	// 如果是奇数,1就在正中心位置
			var posx = parseInt(n/2),
				posy = parseInt(n/2);
			re[posx][posy] = 1;
			xy = {x:posx,y:posy};
		}else{
			var posx = parseInt((n-1)/2),
				posy = parseInt((n-1)/2);
			re[posx][posy] = 1;
			xy = {x:posx,y:posy};
		}
	}
	
	/**
		按顺序依次填充所有的数字位置
	*/
	function step(){
		var n = 2;
		
		while(n <= max){	
			switch(currentPos){
				case 1:// 
					if(re[xy.x][xy.y+1] == 0){
						re[xy.x][xy.y+1] = n;
						n++;
						xy = {x:xy.x,y:xy.y+1};
						currentPos++;
					}else{
						if(currentPos == 1){
							currentPos = 4;
						}else{
							currentPos--;
						}
					}
					break;
				case 2:// 
					if(re[xy.x+1][xy.y] == 0){
						re[xy.x+1][xy.y] = n;
						xy = {x:xy.x+1,y:xy.y};
						currentPos++;
						n++;
					}else{
						if(currentPos == 1){
							currentPos = 4;
						}else{
							currentPos--;
						}
					}
					break;
				
				case 3://
					if(re[xy.x][xy.y-1] == 0){
						re[xy.x][xy.y-1] = n;
						xy = {x:xy.x,y:xy.y-1};
						currentPos++;
						n++;
					}else{
						if(currentPos == 1){
							currentPos = 4;
						}else{
							currentPos--;
						}
					}
					break;
				case 4://
					if(re[xy.x-1][xy.y] == 0){
						re[xy.x-1][xy.y] =n;
						xy = {x:xy.x-1,y:xy.y};
						currentPos = 1;
						n++;
					}else{
						if(currentPos == 1){
							currentPos = 4;
						}else{
							currentPos--;
						}
					}
					break;
				default:
					break;
			}
		}
		console.log("end");
	}
	
	initMap();
	firstPos();
	step();
	print();
	
	/**
		螺旋数组
	*/
	function print(){
		var msg = "";
		for(var i = 0 ; i < re.length ; i++){
			for(var j = 0 ; j < re[i].length ; j++){
				msg += " "+re[i][j];
			}
			msg += "\n";
		}
		alert(msg);
	}
}
circleNumber(3);

 

 

将代码复制到console中运行即可

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics