`
come_for_dream
  • 浏览: 120296 次
  • 性别: 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语言实现算法,通过测试分析,程序运行结果正确,运行效率较高。...

    分治算法在循环赛赛程分配中的应用

    在循环赛赛程分配中,分治算法的应用体现在设计一个公平且高效的赛事安排表。循环赛的特点是每个参赛选手或队伍都需要和其他所有选手或队伍各比赛一次,这就需要合理安排赛程,确保比赛的连续性和公正性。对于选手...

    循环赛日程表设计源代码

    循环赛日程表设计源代码是一种利用分治法策略实现的算法,常见于体育赛事的组织安排中。分治法是一种高效的问题解决方法,它将一个大问题分解为多个小问题,然后对这些小问题进行独立处理,最后将结果合并得到原问题...

    循环赛日程表(java)

    用java实现的循环赛日程表程序。循环赛日程表是算法中的几个经典问题之一

    循环赛日程表

    在循环赛日程表的生成中,我们可以利用递归分治的思想,将整个赛程表分为多个较小的部分,逐步构建。 接下来,我们详细讨论如何用C语言实现这个算法。C语言是一种底层、高效的语言,适合处理这种计算密集型的任务。...

    循环赛问题分析与C语言代码-分治法.doc

    循环赛问题分析与C语言代码-分治法 本文将详细分析循环赛问题,并提供了具体的算法实现。循环赛问题是指在n个运动员之间进行网球循环赛的比赛...关键词:循环赛问题、分治法、C语言代码、算法实现、比赛日程表设计。

    用分治算法设计循环赛日程表

    在循环赛日程表的设计中,分治算法可能用于将所有参赛队伍分为多个小组,然后处理每个小组内的比赛安排,最后再组合成完整的赛程表。 在具体实现中,我们可能需要以下步骤: 1. **需求分析**:明确要解决的问题,...

    分治法实现循环赛问题1

    本文主要讨论了分治法实现循环赛问题的解决方案。分治法是一种常用的算法设计技术,它将复杂的问题分解成小问题,然后解决小问题,并将结果组合起来,以解决原始问题。在这里,我们使用分治法来解决循环赛问题,即将...

    C语言实现循环赛日程安排问题

    ### C语言实现循环赛日程安排问题 #### 问题背景及描述 循环赛日程安排问题在算法设计中属于一个非常典型的应用场景。该问题主要应用于体育竞赛等场合,其中最为人熟知的例子就是循环赛(如网球循环赛)。具体到本...

    循环赛日程表设计

    ### 循环赛日程表设计与分治法 #### 分治法原理 分治法是一种重要的算法设计策略,其核心思想是将一个问题分解成若干个规模较小的相同或相似的子问题,递归地解决这些子问题,并将子问题的解合并起来形成原问题的...

    循环赛日程安排及找零问题的实验报告

    实验报告的主题涵盖了两个重要的算法设计问题,分别是循环赛日程安排和找零钱问题,这两个问题都可以通过特定的算法策略来解决,即分治法和贪心算法。 **一、循环赛日程安排问题** 这个问题涉及到如何高效地组织16...

    使用分治策略递归和非递归和递推算法解决循环赛日程表课程设计报告.docx

    **算法设计与分析课程设计报告** 一、常用算法 ...以上就是关于循环赛日程表问题的算法设计与分析,包括分治策略的递归和非递归实现以及递推算法的实现。在实际应用中,应根据具体情况选择合适的算法。

    分治法实现比赛日程安排

    总之,通过分治法和Java编程,我们可以有效地解决比赛日程安排问题,实现一个灵活且高效的解决方案。这不仅锻炼了我们的算法思维,还提高了我们处理实际问题的能力。在实际应用中,这种问题解决方式也可以扩展到其他...

Global site tag (gtag.js) - Google Analytics