サイクルスケジュールの問題

9886 ワード

标题:2^k人の選手がテニスのリーグ戦を行い、試合スケジュールを設計する必要がある.試合はn-1日間行われた.各選手は1日に1回しか試合ができず、各選手は他の選手と1回ずつ試合をしなければならない.解決:非常に簡単な再帰的な問題です.
#include
#include
using namespace std;
const int maxn = 5000;
int k;
int map[maxn][maxn];
void com(int len) {
     
 if (len == 0) {
     
  return;
 }
 com(len / 2);
 for (int i = 1; i <= len; i++) {
     
  for (int j = len + 1; j <= 2 * len; j++) {
     
   map[i][j] = map[i][j - len] + len;
  }
 }
 for (int i = 1 + len; i <= 2 * len; i++) {
     
  for (int j = 1; j <= len; j++) {
     
   map[i][j] = map[j][i];
  }
 }
 for (int i = 1 + len; i <= 2 * len; i++) {
     
  for (int j = 1 + len; j <= 2 * len; j++) {
     
   map[i][j] = map[i - len][j - len];
  }
 }
}
int main()
{
     
 map[1][1] = 1;
 cin >> k;
 com(pow(2, k - 1));
 for (int i = 1; i <= pow(2, k); i++) {
     
  for (int j = 1; j <= pow(2, k); j++) {
     
   cout << map[i][j] << " ";
  }
  cout << endl;
 }
 return 0;
}