分治算法求解赛程安排
来源:互联网 发布:上海网络作家协会 编辑:程序博客网 时间:2024/04/28 20:00
#include<iostream>
#include<string>
using namespace std;
const int maxn=64;//最多安排64个人
int a[maxn+1][maxn+1]={0};
void game(int k,int n)//安排编号为k开始的n个运动员的比赛日程
{
if(n==2)//分治到只有两个人比赛
{
a[k][1]=k;//参赛选手的编号
a[k][2]=k+1;//参赛选手的对手编号
a[k+1][1]=k+1;
a[k+1][2]=k;
}
else
{
game(k,n/2);//分治为前半部分的人来比赛
game(k+n/2,n/2);//后半部分的人的赛程安排
//填充右上角
for(int i=k;i<k+n/2;i++)
{
for(int j=n/2+1;j<=n;j++)
{
a[i][j]=a[i+n/2][j-n/2];
}
}
//填充左下角
for(int i=k+n/2;i<k+n;i++)
{
for(int j=n/2+1;j<=n;j++)
{
a[i][j]=a[i-n/2][j-n/2];
}
}
}
}
int main()
{
int num;
cout<<"请输入参赛选手的人数(2的幂次方,且不超过64人):"<<endl;
cin>>num;
game(1,num);
cout<<"编号 ";
for(int i=1;i<num;i++)
cout<<"第"<<i<<"天 ";
cout<<endl;
for(int i=1;i<=num;i++)//运动员编号
{
for(int j=1;j<=num;j++)//对手编号
cout<<" "<<a[i][j]<<" ";
cout<<endl;
}
return 0;
#include<string>
using namespace std;
const int maxn=64;//最多安排64个人
int a[maxn+1][maxn+1]={0};
void game(int k,int n)//安排编号为k开始的n个运动员的比赛日程
{
if(n==2)//分治到只有两个人比赛
{
a[k][1]=k;//参赛选手的编号
a[k][2]=k+1;//参赛选手的对手编号
a[k+1][1]=k+1;
a[k+1][2]=k;
}
else
{
game(k,n/2);//分治为前半部分的人来比赛
game(k+n/2,n/2);//后半部分的人的赛程安排
//填充右上角
for(int i=k;i<k+n/2;i++)
{
for(int j=n/2+1;j<=n;j++)
{
a[i][j]=a[i+n/2][j-n/2];
}
}
//填充左下角
for(int i=k+n/2;i<k+n;i++)
{
for(int j=n/2+1;j<=n;j++)
{
a[i][j]=a[i-n/2][j-n/2];
}
}
}
}
int main()
{
int num;
cout<<"请输入参赛选手的人数(2的幂次方,且不超过64人):"<<endl;
cin>>num;
game(1,num);
cout<<"编号 ";
for(int i=1;i<num;i++)
cout<<"第"<<i<<"天 ";
cout<<endl;
for(int i=1;i<=num;i++)//运动员编号
{
for(int j=1;j<=num;j++)//对手编号
cout<<" "<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
0 0
- 分治算法求解赛程安排
- 分治算法-选手赛程安排
- 比赛赛程安排算法--分治算法
- 分治算法之赛程安排问题
- 分治法--循环赛赛程安排
- 【分治法】赛程安排问题
- 网球循环赛赛程安排(分治策略)---附带详细代码
- 分治算法之循环赛程日志表
- 赛程安排问题
- 赛程安排问题
- 循环赛程安排
- 单循环赛程安排问题
- 循环赛程安排
- 【计算机算法分析】分治法——赛程问题
- 【模拟退火】【NOI2008】赛程安排
- 循环赛赛程安排---递归思想
- 赛程安排--基于多边形思想
- 求解最大值与最小值-分治算法
- 【小松教你手游开发】【unity实用技能】Unity3D研究院之第一人称第三人称角色控制组件修改C#版本
- 事务的acid理解
- 最大程度地降低乘员地伤害程度
- nyoj 108 士兵杀敌系列
- Unity 3D笔记——脚本让camera转动起来
- 分治算法求解赛程安排
- hadoop 操作 hdfs
- [leetcode]Jump Game
- builder模式
- 算法导论-第六章-堆排序:基于最大堆的排序C++实现
- HDU's ACM 2065 "红色病毒"问题
- C++开源库相关
- leetcode:Reorder List
- android关于cursor【转载】