循环比赛日程表
来源:互联网 发布:平面图设计软件下载 编辑:程序博客网 时间:2024/04/30 07:58
Problem Description
设有N个选手进行循环比赛,其中N=2^M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。
Input
输入第一行为T,表示数据组数,对于每组数据就一个M(1<=M<=10)。
Output
对于每组输入的M,输出表格形式的比赛安排表
Sample Input
13
Sample Output
1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1Hint 输出每个数用%3d格式。
/*
解题报告: 以第一列为起始点,第二列为第一天........第m列为第m-1天。
对每一行单独处理。每一行每一列的数字都不相同。
*/
//标程:
#include<stdio.h>#include<string.h>#include<math.h>
int n,vis[1100][1100],p[1100][1100],m;
int f(int x,int y,int i){ int j; for(j=1;j<=x;j++) if(p[j][y]==i) return 0; return 1;}
void dfs(int x,int y){ int i; for(i=1;i<=m;i++) { if(!vis[x][i] && f(x,y,i)) { p[x][y]=i; vis[x][i]=1; dfs(x,y+1); } }}
int main(){ //freopen("a.txt","r",stdin); int t,i,j; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(p,0,sizeof(p)); memset(vis,0,sizeof(vis)); m=(int)pow(2.0,n); for(i=1;i<=m;i++) { p[i][1]=i; vis[i][i]=1; dfs(i,2); } for(i=1;i<=m;i++) { for(j=1;j<=m;j++) printf("%3d",p[i][j]); printf("\n"); } } return 0;}
- 循环比赛日程表
- 循环比赛日程表
- 循环比赛日程表
- 循环比赛日程表
- 循环比赛日程表
- 分治 循环比赛日程表
- 循环比赛日程表
- 循环比赛日程表
- 循环比赛日程表(match)
- 循环比赛日程表 (分治)
- 基础分治算法题——循环比赛日程表
- 循环日程表
- 比赛日程表PASCAL
- 递归--循环日程表问题
- NK1437(循环日程表) [分治]
- 循环日程表问题
- 循环赛事日程表
- 循环日程表问题
- 第13周项目3:二进制转换
- 今天有感
- 利用ASP.Net技术进行项目开发
- 室内效果图 3DsMax
- android adb网络调试 Android中使用WIFI来连接ADB 简单100%成功
- 循环比赛日程表
- 异常详细信息: System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。
- ADXL345三轴加速 arduino
- C++中使用C代码
- 国嵌——虚拟总线之platform
- 关于PLSQL Developer连接oracle 64位问题
- 浙工ACM1092
- 用递归求二进制
- 十二周——银行系统(2)