社区
数据结构与算法
帖子详情
分治法-网球选拔赛
sandsboy
2004-03-28 11:40:29
有n(n是2的幂)人参加网球选拔赛,比赛采用单循环,即每人要参加n-1场比赛。假定每人每天只有一场比赛,则选拔赛需要n-1天。比赛的日程表可用这样的矩阵A表示,行号i表示第i个运动员,列号j表示第j天,aij(1<=aij<=n)表示第i个运动员在第j天要与运动员aij想遇。(注:其中aij,i、j是a的下标,和数组的下标一样的)试用分治法编写为该选拔赛设计一张日程表的算法。
...全文
110
2
打赏
收藏
分治法-网球选拔赛
有n(n是2的幂)人参加网球选拔赛,比赛采用单循环,即每人要参加n-1场比赛。假定每人每天只有一场比赛,则选拔赛需要n-1天。比赛的日程表可用这样的矩阵A表示,行号i表示第i个运动员,列号j表示第j天,aij(1<=aij<=n)表示第i个运动员在第j天要与运动员aij想遇。(注:其中aij,i、j是a的下标,和数组的下标一样的)试用分治法编写为该选拔赛设计一张日程表的算法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sandsboy
2004-03-31
打赏
举报
回复
俺自己搞定了
#include <iostream.h>
#include <iomanip.h>
#define N 16
int L[N][N];
void Assign(int n,int r1,int c1);
void DivideAndConquer(int n,int r1,int c1,int r2,int c2);
void Display(int n);
void Copy(int n,int r1,int c1,int r2,int c2);
void main()
{
int n;
cout<<"please input n:";
cin>>n;
DivideAndConquer(n,1,1,n,n);
Display(n);
}
void Assign(int n,int r1,int c1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j) L[r1+i-1][c1+j-1]=c1;
else L[r1+i-1][c1+j-1]=c1+1;
}
return;
}
void DivideAndConquer(int n,int r1,int c1,int r2,int c2)
{
if(n==2) Assign(n,r1,c1);
else
{
n/=2;
DivideAndConquer(n,r1,c1,r1+n-1,c1+n-1);
Copy(n,r1+n,c1+n,r1,c1);
DivideAndConquer(n,r1,c1+n,r1+n-1,c2);
Copy(n,r1+n,c1,r1,c1+n);
}
return;
}
void Display(int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<setw(3)<<L[i][j];
cout<<endl;
}
return;
}
void Copy(int n,int r1,int c1,int r2,int c2)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
L[r1+i-1][c1+j-1]=L[r2+i-1][c2+j-1];
return;
}
sandsboy
2004-03-31
打赏
举报
回复
#include <iostream.h>
#include <iomanip.h>
#define N 16
int L[N][N];
void Assign(int n,int r1,int c1);//赋值
void DivideAndConquer(int n,int r1,int c1,int r2,int c2);//分治
void Display(int n);//输出
void Copy(int n,int r1,int c1,int r2,int c2);//对角线复制
void main()
{
int n;
cout<<"please input n:";
cin>>n;
DivideAndConquer(n,1,1,n,n);
Display(n);
}
void Assign(int n,int r1,int c1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j) L[r1+i-1][c1+j-1]=c1; //主对角线元素赋值
else L[r1+i-1][c1+j-1]=c1+1;//非对角线元素赋值
}
return;
}
void DivideAndConquer(int n,int r1,int c1,int r2,int c2)
{
if(n==2) Assign(n,r1,c1);
else
{
n/=2;
DivideAndConquer(n,r1,c1,r1+n-1,c1+n-1);
Copy(n,r1+n,c1+n,r1,c1);//主对角线复制,左上方阵复制到右下方阵
DivideAndConquer(n,r1,c1+n,r1+n-1,c2);
Copy(n,r1+n,c1,r1,c1+n);//次对角线复制,右上方阵复制到左下方阵
}
return;
}
void Display(int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<setw(3)<<L[i][j];
cout<<endl;
}
return;
}
void Copy(int n,int r1,int c1,int r2,int c2)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
L[r1+i-1][c1+j-1]=L[r2+i-1][c2+j-1];
return;
}
字节3-1级别把《数据结构与算法》讲透了,带源码笔记
分治法
是一种重要的基于递归的算法设计技术,分治算法递归地将问题分解为两个或多个同类型的子问题,直至这些子问题简.单到能够直接求解,然后再将这些子问题的解合成为原始问题的解。项目可以是存储在数据库中的...
完美!字节3-1级别大佬把《数据结构与算法》讲透了,带源码笔记
分治法
是一种重要的基于递归的算法设计技术,分治算法递归地将问题分解为两个或多个同类型的子问题,直至这些子问题简.单到能够直接求解,然后再将这些子问题的解合成为原始问题的解。项目可以是存储在数据库中的...
完美!字节3-1级别大佬把《数据结构与算法》讲透了,附带源码笔记!
分治法
是一种重要的基于递归的算法设计技术,分治算法递归地将问题分解为两个或多个同类型的子问题,直至这些子问题简.单到能够直接求解,然后再将这些子问题的解合成为原始问题的解。项目可以是存储在数据库中的...
字节3-1级别神人把《数据结构与算法》完美讲透了,带源码笔记
分治法
是一种重要的基于递归的算法设计技术,分治算法递归地将问题分解为两个或多个同类型的子问题,直至这些子问题简.单到能够直接求解,然后再将这些子问题的解合成为原始问题的解。项目可以是存储在数据库中的...
阿里3-1级别的神把《数据结构与算法》讲透了(源码笔记)
开篇 数据结构是计算机科学与技术专业非常重要的一门核心基础课,计算机科学各个领域以及各种应用软件都要使用相关的数据结构...对于正在准备面试、参加选拔性考试以及校园面试的读者很有帮助。 祝君在2022年金金三
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章