java 递归实现循环比赛日程

在java实现循环比赛日程的程序中,主要运用的思想就是分治法。

       分治法:通俗的理解就是在实际需要解决的问题当中,将大的问题分成小的问题,逐次分割,直到达到容易解决的范围。然后再将分割的小域的解按一定规律组合在一起成为“母”解,也就是这个大问题的解。

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

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

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

     (3)循环赛一天进行n-1天

       按照这个要求可将比赛日程设计成n行和n-1列的一个表,在表的第1列放的是选手的编号其余列存放的是对应的比赛对手。按照分治策略,我们将所有对手设计成两组,n个选手的比赛日程表就可以通过n/2个选手设计的比赛日程来决定。递归的用这种一分为二的策略对选手进行分割,直到只剩下2个选手时,比赛日程的指定就变得简单。

public class recursion3 {
	final static int m=16; //定义参加比赛运动员的编号
	public static int a[][]=new int[m][m];
	public static void main(String[] args)
	{
		int i,j;
		recursion(1,m); //将参数传给递归函数
		for(i=0;i
运行的结果如下所示(运行结果是当运动员个数为8个的时候,最左边的一列为对应的运动员编号):

1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1

猜你喜欢

转载自blog.csdn.net/douzizuibang/article/details/41551153
今日推荐