`
come_for_dream
  • 浏览: 123667 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

循环日赛表的分治实现

 
阅读更多



                                 循环日赛表的分治实现

 

 

 

 实现循环赛日程表。

设 有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:

   (1)每个选手 必须与其它n-1个选手各赛一次

   (2)每个选手一天只能赛一场

   (3)循环赛进行n-1

 

基本思路:

  按分治策略,将所有的的选手分为两组,N和选手的比赛日程表就可以通过N/2个选手设计的日程来决定。递归的对选手进行分割,直到只剩下2个选手时,比赛的日程表就变得简单。这时只要让这两个选手进行比较近好了。

 

实现思路:

   我们可以创建一个二维数组来存放数据,int [][]table=new int[num][num];

   在第一行和第一列放入数据来初始化数组

 

然后对数组进行递归处理
 将左上角的数据写到右下角的数据,将右上角的数据写到左下角的数据。

看代码吧

private void sort(int x, int y, int step) {
	
		//如果递归到只剩下一步,即只剩下两个对手,返回
		if(step==1)return;
		
		step/=2;
		
		//对左上右下的这条对角线上的数据进行递归
		sort(x, y, step);
	
		//对右上左下的数据进行递归
		sort(x,y+step,step);
		
		for(int i=0;i<step;i++)
			//对每个分区进行赋值
			for(int j=0;j<step;j++){
				//右下角的数据等于左上角的数据
				table[x+step+i][y+step+j]=table[x+i][y+j];
			    //左下角的数据等于右上角的数据
				table[x+step+i][y+j]=table[x+i][y+step+j];
			
			}
	}

   

 下面是运行的效果

 

java文件见附件(全部代码) 

 

 

 

 

<!--EndFragment-->
  • 大小: 16.8 KB
  • 大小: 37.6 KB
分享到:
评论

相关推荐

    循环赛日程表(分治法)

    设有n=2^k个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次。(2)每个选手一天只能比赛一次。 (3)循环赛一共需要进行n-1天。用分治法实现

    循环赛日程表(分治递归法)

    循环赛日程表是计算机科学中一种常见的问题,它涉及到分治递归策略的应用。在循环赛中,每个参赛者都要与其他所有参赛者比赛一次,安排这样的赛程表需要巧妙的算法设计。在这个问题中,我们可以用递归和分治的思想来...

    循环赛日程表分治算法c语言.doc

    循环赛日程表分治算法c语言实现 本文介绍了循环赛日程表的设计算法,使用C语言实现。该算法的主要思想是使用分治策略,解决循环赛日程表问题。 循环赛日程表问题 循环赛日程表问题是指在一个循环赛中,如何设计一...

    循环赛日程表的分治算法实现实验报告_gxl.doc

    ### 循环赛日程表的分治算法实现实验报告 #### 实验背景与目的 本次实验聚焦于“循环赛日程表的分治算法实现”,旨在通过实践加深学生对分治算法的理解与应用能力。分治算法是一种重要的算法设计技术,在许多问题...

    循环赛日程表问题研究

    本文采用分治算法来解决循环赛日程表的安排问题。通过对问题的详细分析,列出1到10个选手的比赛日程表,找出两条规则,作为算法实现的依据,而后采用c语言实现算法,通过测试分析,程序运行结果正确,运行效率较高。...

Global site tag (gtag.js) - Google Analytics