java 遞迴實現迴圈比賽日程
阿新 • • 發佈:2018-12-07
在java實現迴圈比賽日程的程式中,主要運用的思想就是分治法。
分治法:通俗的理解就是在實際需要解決的問題當中,將大的問題分成小的問題,逐次分割,直到達到容易解決的範圍。然後再將分割的小域的解按一定規律組合在一起成為“母”解,也就是這個大問題的解。
設有n=2*k個運動員要進行網球迴圈賽。先要設計一個滿足一下要求的比賽日程:
(1)每個選手必須與其他n-1個選手各比賽一次
(2)每個選手一天只能比賽一次
(3)迴圈賽一天進行n-1天
按照這個要求可將比賽日程設計成n行和n-1列的一個表,在表的第1列放的是選手的編號其餘列存放的是對應的比賽對手。按照分治策略,我們將所有對手設計成兩組,n個選手的比賽日程表就可以通過n/2個選手設計的比賽日程來決定。遞迴的用這種一分為二的策略對選手進行分割,直到只剩下2個選手時,比賽日程的指定就變得簡單。
執行的結果如下所示(執行結果是當運動員個數為8個的時候,最左邊的一列為對應的運動員編號):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
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 |