#include <stdio.h>
#define M 13
#define N ((int)((M+1)/2)*2) //令大于等于M的第一个偶数个队伍参加比赛,
int ged[N][N]={0}; //记录队伍之间的比赛情况,用1标志两队未比赛,
int g[N]; //记录本轮是否参加过比赛,
int [N/2][2]; //记录本轮的比赛场次
main()
{
int a,i,j,t1,t2; // a为比赛的轮数,t1记录一场比赛中的编号小的队伍,t2为编号大的队伍
int only; // 若比赛的队伍数为奇数时,记录单独的队伍编号
int again=0,z,no; // again 显示是否需要重新选对,z为本轮比赛的场次,no是否选出队伍进行比赛
for(i=0;i<N;i++) for(j=i+1;j<N;j++) ged[i][j]=1; //初始化比赛记录,
for(a=1;a<N;a++)
{
for(i=0;i<N/2+1;i++) T[i][0]=-1,T[i][1]=-1; // 初始化本轮比赛场次
z=0;
for(i=0;i<N;i++) g[i]=0; // 初始化本轮参加过比赛的队伍
g[a]=1,g[0]=1; // 确定队伍0和第a支队伍比赛
T[z][0]=0,T[z][1]=a; //记录比赛情况
for(t1=1;t1<N;t1++)
{
no=1;
if (g[t1]==1) continue; // 如果t1已参加过本轮比赛,判断下一个
for(t2=t1+1;t2<N;t2++) // 选择t2队伍
{
if (again) t2=T[z][1]+1,z--,again=0;
if (g[t2]==0 & ged[t1][t2]==1) //当t2本轮未参赛,且未与t1比赛,记录比赛
{
no=0;
z++;
T[z][0]=t1;
T[z][1]=t2;
g[t1]=1,g[t2]=1; //记录t1与t2参赛
ged[t1][t2]=0; //记录t1与t2比赛过了
break;
}
}
if (no)
{
again=1;
t1=T[z][0]-1;
g[T[z][0]]=0,g[T[z][1]]=0;
ged[T[z][0]][T[z][1]]=1;
}
}
only=-1;
for(j=0;j<=z;j++)
{
if(T[j][1]==M) {only=T[j][0];continue;}
printf("T%.2d vs T%.2d ",T[j][0],T[j][1]);
}
if (only!=-1) printf("T%.2d ",only);
printf("\n");
}
printf("\n");
}