+ -
当前位置:首页 → 问答吧 → 用分治法求循环赛日程安排,得不到想要的结果,请大虾们帮忙改改~~

用分治法求循环赛日程安排,得不到想要的结果,请大虾们帮忙改改~~

时间:2011-12-13

来源:互联网

#include<iostream>
#include<math.h>
using namespace std;
const int MAX=100;
int a[MAX][MAX];

void main()
{
  int p,q,k,m;
  cout<<"请输入k值"<<endl;
  cin>>k;
  m= pow(2,k);  
  int n=2;
  int t;
  int i,j;
  
  //求解两个选手比赛日程,得到左上角元素
  a[1][1]=1;
  a[1][2]=2;
  a[2][1]=2;
  a[2][2]=1;
  for(t=1;t<k;t++)//迭代处理,依次处理2的平方,……,2的k次方
  {
  int temp=n;
  n=n*2;
  //填坐下角元素
  for(i=temp+1;i<=n;i++)
  for(j=1;j<=temp;j++)
  a[i][j]=a[i-temp][j]+temp;//左下角元素和左上角元素的对应关系
  //将左下角元素抄到右上角
  for(i=1;i<temp;i++)
  for(j=temp+1;j<=n;j++)
  a[i][j]=a[i+temp][(j+temp)%n];
  //将左上角元素抄到右下角
  for(i=temp+1;i<=n;i++)
  for(j=temp+1;j<=n;j++)
  a[i][j]=a[i-temp][j-temp];
  }
  for(p=1;p<=m;p++)
  {
for(q=1;q<=m;q++)
{
cout<<a[p][q]<<" ";
}
cout<<endl;
  }

作者: majing321   发布时间: 2011-12-13

作者: xmx2009   发布时间: 2011-12-13

热门下载

更多