迴圈賽日程表 分治 遞推 遞迴

2021-09-25 03:02:56 字數 1954 閱讀 9861

設有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 位選手在第...