递归分治实现比赛日程安排(仅对2…

本文介绍了一个简单的C++程序,该程序使用Ubuntu环境下的基础工具(vim、makefile、g++)进行实现和调试。程序主要功能是生成特定矩阵,并展示了从源代码到编译运行的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本来是很简单的一个东西,根本没有必要写下来,不过,鉴于是第一次完全使用Ubuntu下面的基础工具(vim、makefile、g++)实现和调试的,所以,贴点膏药:
    test.cpp:
#include <iostream>
using namespace std;

#define MaxLength 1000
void Table(int **A, int start, int end);
void Merge(int **A, int **B, int **C, int n);

int main()
{
int **A;
int n;
int i, j;
//initialize Matrix A
A = new int *[MaxLength];
for(i = 0; i < MaxLength; i++)
{
A[i] = new int[MaxLength];
}
cout<<"Please input the number of competitor(should be power of 2):"<<endl;
cin>>n;
Table(A, 0,  n - 1);
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
cout<<A[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

void Table(int **A, int start, int end)
{
if(start == end - 1)
{
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
if(i == j)
A[i][j] = start + 1;
else
A[i][j] = end + 1;
}
else
{
int half = (end - start) / 2;
int **B = new int *[half + 1];
int **C = new int *[half + 1];
for(int i = 0; i < half + 1; i++)
{
B[i] = new int[half + 1];
C[i] = new int[half + 1];
}
Table(B, start, start + half);
Table(C, end - half, end);
Merge(A, B, C, half + 1);
for(int i = 0; i < half; i++)
{
delete B[i];
delete C[i];
}
delete B;
delete C;
}
}

void Merge(int **A, int **B, int **C, int n)
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
//diagonal elments
A[i][j] = B[i][j];
A[i + n][j + n] = B[i][j];
//anti-diagonal elements
A[i][j + n] = C[i][j];
A[i + n][j] = C[i][j];
}
}
    Makefile:
test.out:test.o
g++ -o test.out test.o
test.o:test.cpp
g++ -c test.cpp

    运行结果:
Please input the number of competitor(should be power of 2):
8
1 2 3 4 5 6 7 8 
2 1 4 3 6 5 8 7 
3 4 1 2 7 8 5 6 
4 3 2 1 8 7 6 5 
5 6 7 8 1 2 3 4 
6 5 8 7 2 1 4 3 
7 8 5 6 3 4 1 2 
8 7 6 5 4 3 2 1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值