js算法:分治法-循环赛事日程表

附代码


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> 循环赛事日程表  </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
  <script type="text/javascript" src="json2.js"></script>
   <style>
  table,td{
    border:1px solid gray;
	text-align:center;
  }
  </style>
  <script>
      var arr=[];
	  var calc_num=0;
	  /*
      $(function(){
	    for(var i=0;i<8;i++){
		  arr.push(new Array());
		}
	    game(3,8);
		for(var i=0;i<arr.length;i++){
		   for(var j=0;j<arr[i].length;j++){
		       document.write(arr[i][j]+"  ");
		   }
		   document.write("<br/>");
		}
	  })*/

	  function init(){
	    arr=[];
		calc_num=0;
		var num=Math.pow(2,parseInt($("#txt_k").val()));
	    for(var i=0;i<num;i++){ 
		  arr.push(new Array());
		}
		for(var i=0;i<num;i++)
		    arr[0][i]=i+1;//设置日程表第一行
		initTable();
	  }

	   function initTable(){
	    $("#container").html('');
		var table=$("<table></table>");
		var num=Math.pow(2,parseInt($("#txt_k").val()));
		var width=document.body.clientWidth*0.4/num;
		//alert(num+":"+width);
		for(var i=0;i<num;i++){
		   var tr=$("<tr style='width:"+width*num+"px;height:"+width+"px;'></tr>");
		   for(var j=0;j<num;j++){
		     var td=$("<td style='width:"+width+"px;height:"+width+"px;'> </td>");
			 if(i==0)
			    td.text(j+1);
			 tr.append(td);
		   }
		   table.append(tr);
		}
		 $("#container").append(table);
	 }
      function calc(){
	      var num=parseInt($("#txt_k").val());
	      if(calc_num<num){
	         game(calc_num,Math.pow(2,num-calc_num-1));
			 calc_num++;
		   }
		  else
		     alert("计算完毕,请重新初始化");
	  }


	  function game(k,n){	     
	     var m=Math.pow(2,k);//填充起始位置
		 //for(var s=0;s<k;s++){
		    //n=parseInt(n/2);
			for(var t=0;t<n;t++){//控制次数
			  for(var i=m;i<m*2;i++){//i控制行
				 for(var j=m;j<m*2;j++){//j控制列 				   
				   alert("arr["+i+"]["+(j+t*m*2)+"]="+arr[i-m][j+t*m*2-m]);
			       arr[i][j+t*m*2]=arr[i-m][j+t*m*2-m];//右下角等于左上角
				   $("table tr").eq(i).find("td").eq(j+t*m*2).text(arr[i][j+t*m*2]);
				   alert("arr["+i+"]["+(j+t*m*2-m)+"]="+arr[i-m][j+t*m*2]);
				   arr[i][j+t*m*2-m]=arr[i-m][j+t*m*2];//左下角等于右上角
				     $("table tr").eq(i).find("td").eq(j+t*m*2-m).text(arr[i][j+t*m*2-m]);
			     }
			   }
			}
		 //m=m*2;
		 //}

        
	  }

	  
  </script>
 </HEAD>
 <BODY style="text-align:center">
      级数:
	<input type="text" name="arr1" id="txt_k" style="width:60px" value="3"/>
	<input type="button" value="初始化" οnclick="init()"/>
	<input type="button" value="下一步" οnclick="calc()"/>
	<br/>
	<div id="container" style="margin:0 auto;"></div>
 </BODY>
</HTML>

关于算法详细解说可参考博客

0008算法笔记——【分治法】循环赛事日程表

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值