赛程安排--基于多边形思想

来源:互联网 发布:php短信轰炸机源码 编辑:程序博客网 时间:2024/04/29 00:44

大概题意:设有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);

}

偶数的情况大家自己改一下代码就可以。
0 0
原创粉丝点击