大概题意:设有n=2K支球队,进行n-1天的比赛,每个球队必须跟其他球队都进行比赛,且每天只跟一个球队比赛,(还有一种情况是奇数支球队,这种情况就得n天才能比完,相信也不难,改一下代码就可以了,具体情况是每天都剩下一支不同的球队不进行比赛)
在此我用多边形法做的具体如下设有(4个球队):
1
3 2
3
第一天:(1,4)(3,2)
1
3 2
第二天:(2,4)(3,1)
1
3 2
第三天:(3,4)(1,2)
如此用多边形进行安排即可:
#include<iostream.h>
#include<malloc.h>
int i,n,j;
int a[50][50];
typedef structnode//定义链表类型
{
int data;
struct node*next,*prior;
}dlinklist;
voidcreatelist(dlinklist *&l,int n)//创建循环双链表(用尾插入法)
{
dlinklist*s,*r;
l=(dlinklist*)malloc(sizeof(dlinklist));
l->data =1;
r=l;
for(i=2;i<=n;i++)
{
s=(dlinklist*)malloc(sizeof(dlinklist));
s->data=i;
r->next=s;
s->prior=r;
r=s;
}
r->next =l;
l->prior =r;
}
voidshuchu(dlinklist *&q)//输出具体安排
{
dlinklist*r=q->prior,*p=q ;
while(p!=r)
{
for(j=0;j<n;j++)
{
if(p->data==a[j][0])
a[j][i]=r->prior->data ;
if(r->prior->data ==a[j][0])
a[j][i]=p->data;
}
p=p->next;
r=r->prior;
}
}
voidanpai(dlinklist *l)//只要用来控制P指针指向下一个位置
{
dlinklist *p=l->next ;
for(i=1;i<=n;i++)
{
shuchu(p);
p=p->next;//
}
}
voiddestroy(dlinklist *&l)//销毁链表
{
dlinklist*pre=l, *p=l->next ;
while(p!=l)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
void main()
{
dlinklist *l;
cout<<"请输入比赛的球队数(奇数):"<<endl;
cin>>n;
for(i=0;i<=n;i++)
a[i][0]=i+1;
createlist(l,n);
anpai(l);
for(intk=0;k<n;k++)
{
for(j=0;j<n;j++)
cout<<a[k][j]<<" ";
cout<<endl;
}
destroy(l);
}
偶数的情况大家自己改一下代码就可以。