算法训练 比赛安排

时间限制:1.0s   内存限制:512.0MB

 

问题描述

  设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。

 

输入格式

  输入文件matchplan.in共一行,输入n的数值。

 

输出格式

  输出文件matchplan.out共(2 n – 1)行,第i行输出第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

 

#include <stdio.h>

int main()
{
    int n;
    int has_matched[66][66] = { 0 };

    scanf("%d", &n);
    for (int i = 2; i <= (1 << n); ++i)
    {
        printf("<%d>%d-%d", i-1, 1, i);
        int chosen[66] = { 0 };
        chosen[i] = 1;
        has_matched[1][i] = has_matched[i][1] = 1;
        for (int j = 2; j <= (1 << n); ++j)
        {
            if (!chosen[j])
            {
                for (int k = j+1; k <= (1 << n); ++k)
                {
                    if ((!chosen[k]) && (!has_matched[j][k]))
                    {
                        printf(" %d-%d", j, k);
                        chosen[j] = chosen[k] = 1;
                        has_matched[j][k] = has_matched[k][j] = 1;
                        break;
                    }
                }
            }
        }
        printf("\n");
    }

    return 0;
}