首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >蓝桥杯 比赛安排 (深搜) -----------------------C语言

蓝桥杯 比赛安排 (深搜) -----------------------C语言

作者头像
Fivecc
发布2022-11-21 14:38:50
发布2022-11-21 14:38:50
3060
举报
文章被收录于专栏:前端ACE前端ACE

/*问题描述   设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成, 每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。 输入格式   输入文件matchplan.in共一行,输入n的数值。 输出格式   输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。   格式为: A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。 样例输入 2 样例输出 <1>1-2,3-4 <2>1-3,2-4 <3>1-4,2-3 */

代码语言:javascript
复制
#include<stdio.h>
int b[30][30]={0};//标记曾经匹配过 
int dq[30]={0};//当天匹配标记 
int a[30];//被匹配者  (小组队伍红方) 
int a1[30];//匹配者 (小组队伍蓝方) 
int tw; //比赛小组队伍 (10支队伍 5队小组队伍) 
int T=0;//判断当前天数比赛 第一顺序方案是否已制定 
void f(int pos )
{int i,j,bt;//当前被匹配者 用于清除标记 

if(tw<pos)//pos 代表当前选第几组的比赛 
    {

        printf("<%d>",a1[1]-1);T=a1[1];//当前天数第一顺序计划已定 
       for(i=1;i<=tw;i++)
        {printf("%d-%d ",a[i],a1[i]);//输出匹配小组队伍 

         b[a[i]][a1[i]]=1; b[a1[i]][a[i]]=1;//相互标记为曾经匹配 
        }
          printf("\n");

    }
    else
    { for(i=1;i<=2*tw;i++)
        if(dq[i]==0){a[pos]=i;dq[i]=1;bt=i;break;} //按顺序拿出被匹配着; 
        for(i=1;i<=2*tw;i++)//匹配者循环 
         if( b[a[pos]][i]==0&&dq[i]==0)//判断曾经是否匹配过并且当前是否被匹配 
         {a1[pos]=i;dq[i]=1;
         f(pos+1);//试执行下一组比赛; 
           dq[i]=0;//清除当前匹配者
         if(T==a1[1]){i=2*tw;} //若当天第一顺序方案已确定则无需重复设计方案 
         }

         dq[bt]=0;//清除当前被匹配者 
    }


}

int main()
{
int n,i,j;
scanf("%d",&n);
tw=n;//小组队伍组数 
n=n*2-1;
for(i=1;i<=n;i++)//循环天数; 
     f(1);//从第一组队伍开始 

return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档