比赛赛程安排算法--分治算法
问题在注释中已说明,直接贴代码!
/** 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;
}
比赛赛程安排算法--分治算法相关推荐
- 【程序8】乒乓球比赛赛程安排
/*[程序8] * 作者 中国风 * 乒乓球比赛赛程安排 * 某学校举行乒乓球比赛,在初赛阶段设置为循环赛,设有n位选手参赛, * 初赛共进行n-1天, 每位选手要与其他每一们选手进行一场比赛, * ...
- 五大常用经典算法—分治算法
原文作者:bigsai 原文地址:五大常用算法:一文搞懂分治算法 目录 前言 分治算法介绍 分治算法经典问题 二分搜索 快速排序 归并排序(逆序数) 最大子序列和 最近点对 结语 前言 分治算法(di ...
- 数据结构与算法--分治算法-最大子序列和问题
分治算法 用于设计算法的一种常用技巧–分治算法(divide and conquer).分治算法由两部分组成: 分(divide):递归然后借机较小的问题(基础情况除外) 治(conquer):然后从 ...
- 算法- 分治算法(实现汉诺塔)
package Algorithm.dac;public class Hannoitower {public static void main(String []args){hannoiTower(5 ...
- 五大常用算法——分治算法详解及经典例题
一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子 ...
- delaunay三角剖分算法——分治算法概述与实现1
参考网址: https://www.cnblogs.com/zhiyishou/p/4430017.html https://www.cnblogs.com/soroman/archive/2007/ ...
- 用图的领接矩阵来解决打比赛赛程安排
说明 设有2n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛.设计一个比赛的安排,使在2n – 1天内每个队都与不同的对手比赛. 例如n=2时的比赛安排: ...
- 网球循环赛赛程安排(分治策略)---附带详细代码
一.问题描述: 设有n个运动员要进行网球循环赛.设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次 ...
- 数据结构与算法 / 分治算法
一.本质 分而治之.将原问题拆分成 n 个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到了原问题的解. 二.实际应用 1.归并排序. 2.10 G的数据进行排序,而 ...
最新文章
- 多账号统一登录(实现方案)
- 3.playbook基础
- 解决神州数码校园上网客服端软件不能在Windows 7 (5956版)安装的问题
- 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络
- CCNA 02 OSI七层
- 【代码实现接口测试】Requests库
- 随机存取是什么意思_手机小白必看!12GB+256GB,同样是GB,它们到底有什么不同?...
- linux(ubuntu)下分区和格式化sd卡
- python创建二维空列表_python定义二维空数组
- JS 入门经典 第三章 判断、循环和函数
- Apple Watch问与答
- SnapKit 约束创建过程
- windows系统启用2个以上的mysql服务
- 项目需求讨论--可能是用InputFilter来做的最好的金额限制
- 软件工程4 用例建模
- PVE系列教程(三)、安装黑威联通
- Pycharm使用小Tips
- execute immediate
- Android:RecycleView基本使用(瀑布流)
- EtherCat主站与从站简介
热门文章
- H5 移动端 保存图片到本地 + 图片预览
- FM调制解调Matlab仿真及FPGA设计
- thinkphp6+webuploader实现大文件(视频)分片上传/本地保存或上传OSS
- 小学生python游戏编程arcade----单词对错检测及记录写入excel中
- 跟我学UDS(ISO14229) ———— 0x19 服务参数介绍
- Zigbee五种通信方式
- Doing Math with Python读书笔记-第5章:Playing with Sets and Probability
- 销售人员怎么精准的找到自己的产品客户
- JAVA SDK安装和环境变量配置
- PLSQL Developer安装配置教程(超详细)