下载此文档

循环比赛日程表-分治法.doc


文档分类:生活休闲 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
比赛日程表
本题由分治法求出循环比赛的日程表。其满足的条件为:
(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能赛一次;
(3)循环赛一共进行n-1天。
按分治策略,将所有的选手分为两半,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。递归地用对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让这2个选手进行比赛就可以了
其c语言实现代码如下:
#include <>
#include <>
void gametable(int k);
void main()
{
int k;
printf("比赛选手的个数为n(n=2*k),请输入参数K(k>0):\n");
scanf("%d",&k);
if(k!=0)
gametable(k);
}
void gametable(int k)
{
int a[100][100];
int n,temp,i,j,p,t;
n=2; //k=0两个参赛选手日程可以直接求得
a[1][1]=1;
a[1][2]=2;
a[2][1]=2;
a[2][2]=1;
for(t=1;t<k;t++) //迭代处理,依次处理2^1....2^k个选手的比赛日程
{
temp=n;
n=2*n;
for(i=temp+1;i<=n;i++) //填左下角元素
{
for(j=1;j<=temp;j++)
{
a[i][j]=a[i-temp][j]+temp; //左下角和左上角元素的对应关系
}
}
for(i=1;i<=temp;i++) //将左下角元素抄到右上角
{
for(j=temp+1;j<=n

循环比赛日程表-分治法 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数3
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小37 KB
  • 时间2018-05-12
最近更新