分治法

您所在的位置:网站首页 比赛日程安排表格图片 分治法

分治法

2024-07-13 03:48| 来源: 网络整理| 查看: 265

【问题描述】设有n=2^k个选手要进行网球循环赛,要求设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次。 (2)每个选手一天只能赛一次。 (3)循环赛在n-1天之内结束。 【问题求解】按问题要求可将比赛日程表设计成一个n行n-1列的二维表,其中第i行、第j列表示和第i个选手在第j天比赛的选手。 假设n位选手被顺序编号为1、2、…、n(2^k)。

由k=1创建k=2的过程 在这里插入图片描述 由k=2创建k=3的过程 在这里插入图片描述

将n=2k问题划分为4部分: (1)左上角:左上角为2k-1个选手在前半程的比赛日程(k=1时直接给出,否则,上一轮求出的就是2k-1个选手的比赛日程)。 (2)左下角:左下角为另2k-1个选手在前半程的比赛日程,由左上角加2k-1得到,例如22个选手比赛,左下角由左上角直接加2(2k-1)得到,23个选手比赛,左下角由左上角直接加4(2k-1)得到。 (3)右上角:将左下角直接复制到右上角得到另2k-1个选手在后半程的比赛日程。 (4)右下角:将左上角直接复制到右下角得到2k-1个选手在后半程的比赛日程。 #include #define MAX 101 //问题表示 int k; //求解结果表示 int a[MAX][MAX]; //存放比赛日程表(行列下标为0的元素不用) void Plan(int k) { int i,j,n,t,temp; n=2; //n从2^1=2开始 a[1][1]=1; a[1][2]=2; //求解2个选手比赛日程,得到左上角元素 a[2][1]=2; a[2][2]=1; for (t=1;t


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3