設有n=2^k個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表:
(1)每個選手必須與其他n-1個選手各賽一次;
(2)每個選手一天只能參賽一次;
(3)迴圈賽在n-1天內結束。
請按此要求將比賽日程表設計成有n行和n-1列的乙個表。在表中的第i行,第j列處填入第i個選手在第j天所遇到的選手。其中1≤i≤n,1≤j≤n-1。8個選手的比賽日程表如下圖:
/*迴圈賽日程表(遞迴法)*/
void
copy
(int
**map,
int sr,
int sl,
int dr,
int dl,
int k)}}
void
table
(int
**map,
int r,
int l,
int k)
intmain()
table
(p,0,0
,k);
cout<<
"cycle competetion schedule:"
<
for(
int i =
0; i < k; i++
)return0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
int a[
100]
[100];
/*迴圈賽日程表的全域性變數*/
/*是乙個copy函式,目的是把以r為長度的正方形範圍從點from到點to*/
void
copy
(int tox,
int toy,
int fromx,
int fromy,
int r)
/*遞迴演算法*/
void
table_recursion
(int a[
100]
,int r,
int l,
int k)
/*非遞迴演算法*/
void
table_recursive
(int k)
}void
print
(int a[
100]
,int n)
}int
main()
#include
#include
void
gametable
(int k)
printf
("number:%d\n\n"
,n);
for(i=
1;i<=n;i++
)for
(j=1
;j<=n;j++)}
intmain()
其他遞迴解法
不怕丟人再貼乙個自己第一次寫的,還沒debug出來qaq
#include
intf
(int i,
int j)
;int k;
for(k=
1;k<=
8;k++
)while(1
)}intmain()
反思分析: 迴圈賽日程表(分治)
設有 n 2的k次方 個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各自賽一次。2 每個選手一天只能賽一次。3 迴圈賽一共進行n 1天。按分治策略,我們可以將所有的選手分為兩半,n個選手的比賽日程表可以通過n 2個選手設計的比賽日程表來決定。遞迴地...
分治法 迴圈賽日程表
設有n 2k個運動員要進行羽毛球迴圈賽,現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其它n 1個選手各賽一次 2 每個選手一天只能比賽一次 3 迴圈賽一共需要進行n 1天。由於n 2 k,顯然n為偶數。按分治策略,將所有的選手分為兩半,n個選手的比賽日程表就可以通過為n 2個選手設計的比...
迴圈賽日程表 分治法
設有n 2 k個運動員,要進行網球迴圈賽。現在要設計乙個滿足以下要求的比賽日程表,每個選手必須與其他n 1個選手各賽一場,每個選手一天只能賽一次,迴圈賽一共進行n 1天,將比賽日程表設計成n行n列,表中除了第一列,其他n 1列才是我們要的,陣列下標行列都從0開始,第i行j列代表第 i 1 位選手在第...