问题在注释中已说明,直接贴代码!

/** bisaisaicheng.c**  Created on: Nov 30, 2013*      Author: bing**      每个选手必须与其他所有选手进行一次比赛,且每位选手每天必须比赛一场*      利用分治算法来简化日程的安排,一分为二的方法*    例如:*      请输入比赛人数,必须为2的幂次:8编 号   第1天 第2天 第3天 第4天 第5天 第6天 第7天1       2       3       4       5       6       7       82       1       4       3       6       5       8       73       4       1       2       7       8       5       64       3       2       1       8       7       6       55       6       7       8       1       2       3       46       5       8       7       2       1       4       37       8       5       6       3       4       1       28       7       6       5       4       3       2       1**/
#include <stdio.h>#define MAX_NUM 16
int biao[MAX_NUM+1][MAX_NUM+1];int schedule(int begin,int num){int i,j,k=num;
/*检查比赛人数是否为2的幂次*/while(k%2==0)k=k/2;if(k!=1){printf("比赛人数必须是2的幂次!");return -1;}
/* 此处开始利用分治算法,递归解决问题*/if(num==2){biao[begin][1]=begin;biao[begin][2]=begin+1;biao[begin+1][1]=begin+1;biao[begin+1][2]=begin;return 0;}schedule(begin,num/2);schedule(begin+num/2,num/2);/*填充右下半部*/for(i=begin+num/2;i<begin+num;i++){for(j=num/2+1;j<=num;j++)biao[i][j]=biao[i-num/2][j-num/2];}/*填充右上半部*/for(i=begin;i<begin+num/2;i++){for(j=num/2+1;j<=num;j++)biao[i][j]=biao[i+num/2][j-num/2];}return 0;
}

其中有一点疑惑,全局变量中的MAX_NUM怎样能避免两个文件重复定义?请留言,谢谢

/** main.c**  Created on: Nov 30, 2013*      Author: bing*/#define MAX_NUM 16
extern int biao[MAX_NUM+1][MAX_NUM+1];int main(){int num;printf("请输入比赛人数,必须为2的幂次:");scanf("%d",&num);int result=schedule(1,num);if(result<0)return -1;int i,j;printf("编 号 ");for(i=1;i<num;i++){printf("\t第%d天",i);}printf("\n");for(i=1;i<=num;i++){for(j=1;j<=num;j++){printf("%-8d",biao[i][j]);}printf("\n");}return 0;
}

比赛赛程安排算法--分治算法相关推荐

  1. 【程序8】乒乓球比赛赛程安排

    /*[程序8] * 作者 中国风 * 乒乓球比赛赛程安排 * 某学校举行乒乓球比赛,在初赛阶段设置为循环赛,设有n位选手参赛, * 初赛共进行n-1天, 每位选手要与其他每一们选手进行一场比赛, * ...

  2. 五大常用经典算法—分治算法

    原文作者:bigsai 原文地址:五大常用算法:一文搞懂分治算法 目录 前言 分治算法介绍 分治算法经典问题 二分搜索 快速排序 归并排序(逆序数) 最大子序列和 最近点对 结语 前言 分治算法(di ...

  3. 数据结构与算法--分治算法-最大子序列和问题

    分治算法 用于设计算法的一种常用技巧–分治算法(divide and conquer).分治算法由两部分组成: 分(divide):递归然后借机较小的问题(基础情况除外) 治(conquer):然后从 ...

  4. 算法- 分治算法(实现汉诺塔)

    package Algorithm.dac;public class Hannoitower {public static void main(String []args){hannoiTower(5 ...

  5. 五大常用算法——分治算法详解及经典例题

    一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子 ...

  6. delaunay三角剖分算法——分治算法概述与实现1

    参考网址: https://www.cnblogs.com/zhiyishou/p/4430017.html https://www.cnblogs.com/soroman/archive/2007/ ...

  7. 用图的领接矩阵来解决打比赛赛程安排

    说明 设有2n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛.设计一个比赛的安排,使在2n – 1天内每个队都与不同的对手比赛. 例如n=2时的比赛安排: ...

  8. 网球循环赛赛程安排(分治策略)---附带详细代码

    一.问题描述:       设有n个运动员要进行网球循环赛.设计一个满足以下要求的比赛日程表:        (1)每个选手必须与其他n-1个选手各赛一次:        (2)每个选手一天只能赛一次 ...

  9. 数据结构与算法 / 分治算法

    一.本质 分而治之.将原问题拆分成 n 个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到了原问题的解. 二.实际应用 1.归并排序. 2.10 G的数据进行排序,而 ...

最新文章

  1. 多账号统一登录(实现方案)
  2. 3.playbook基础
  3. 解决神州数码校园上网客服端软件不能在Windows 7 (5956版)安装的问题
  4. 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络
  5. CCNA 02 OSI七层
  6. 【代码实现接口测试】Requests库
  7. 随机存取是什么意思_手机小白必看!12GB+256GB,同样是GB,它们到底有什么不同?...
  8. linux(ubuntu)下分区和格式化sd卡
  9. python创建二维空列表_python定义二维空数组
  10. JS 入门经典 第三章 判断、循环和函数
  11. Apple Watch问与答
  12. SnapKit 约束创建过程
  13. windows系统启用2个以上的mysql服务
  14. 项目需求讨论--可能是用InputFilter来做的最好的金额限制
  15. 软件工程4 用例建模
  16. PVE系列教程(三)、安装黑威联通
  17. Pycharm使用小Tips
  18. execute immediate
  19. Android:RecycleView基本使用(瀑布流)
  20. EtherCat主站与从站简介

热门文章

  1. H5 移动端 保存图片到本地 + 图片预览
  2. FM调制解调Matlab仿真及FPGA设计
  3. thinkphp6+webuploader实现大文件(视频)分片上传/本地保存或上传OSS
  4. 小学生python游戏编程arcade----单词对错检测及记录写入excel中
  5. 跟我学UDS(ISO14229) ———— 0x19 服务参数介绍
  6. Zigbee五种通信方式
  7. Doing Math with Python读书笔记-第5章:Playing with Sets and Probability
  8. 销售人员怎么精准的找到自己的产品客户
  9. JAVA SDK安装和环境变量配置
  10. PLSQL Developer安装配置教程(超详细)