1. 程式人生 > >java 遞迴實現迴圈比賽日程

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