Descripción del problema
Hay 2 n (n <= 6) equipos jugando juegos de ciclo único, que se planean completar dentro de 2 n - 1 día, y cada equipo juega un juego todos los días. Diseñe un horario de juego para que cada equipo compita con diferentes oponentes dentro de 2 n - 1 día.
Formato de entrada
El archivo de entrada matchplan.in consta de una línea e ingresa el valor de n.
Formato de salida
El archivo de salida matchplan.out tiene un total de (2 n - 1) líneas, y la línea i muestra el calendario de partidos para el día i.
El formato es: <i> AB, CD, .... Donde i es el número de días, A y B son los números de los dos lados del juego, cada fila tiene un total de 2 n-1 coincidencias.
El formato es: <i> AB, CD, .... Donde i es el número de días, A y B son los números de los dos lados del juego, cada fila tiene un total de 2 n-1 coincidencias.
Entrada de muestra
2
Salida de muestra
<1> 1-2,3-4
<2> 1-3,2-4
<3> 1-4,2-3
<2> 1-3,2-4
<3> 1-4,2-3
La descripción de la salida de muestra es incorrecta. La coma debe ser un espacio. El formato de salida correcto de los datos de evaluación es el siguiente:
No lo hará, consulte https://blog.csdn.net/qq_34845121/article/details/60957163
1 #include <bits / stdc ++. H> 2 usando el espacio de nombres std; 3 int a [ 70 ] [ 70 ]; // a [i] [j] registra si el equipo iy el equipo j han jugado 4 int v [ 70 ] ; // v [i] registra si el equipo i ha jugado 5 int main () { 6 int n; 7 cin >> n; 8 int len = 1 ; 9 for ( int i = 1 ; i <= n ; i ++ ) { 10 len * = 2; // len = Número de equipos 2 ^ n 11 } 12 para ( int i = 0 ; i <len- 1 ; i ++) { // Número de días de juego 2 ^ n-1, que es el número de líneas que se imprimirán 13 printf ( " <% d> " , i + 1 ); // Días de salida 14 memset (v, 0 , sizeof v); // Restablecer (cada equipo en el nuevo día no tiene coincidencia) 15 para ( int j = 0 ; j <len / 2 ; j ++) { // n juegos por día, es decir, cuántas coincidencias salen por línea 16 for ( int k = 1 ; k <= len; k ++) { // Atraviesa todos los equipos, encuentra el primer equipo en participar 17 if (v [k] == 1 ) { // Si el equipo ya vino ese día , Saltar 18 continuar ; 19 } 20 int juez = 0 ; // juzgar si los dos equipos de k y h han jugado 21 para ( int h = 1 ; h <= len; h ++) { // atravesar todos los equipos, Encuentra el segundo equipo para jugar 22 si (k == h) { // No puedo compararme conmigo 23 continuar ; 24 } 25 if (v [h] == 1 ) { // Si el equipo ha venido ese día, omita 26 continuar ; 27 } 28 if (a [k] [h] == 0 && a [h] [ k] == 0 ) { // h, si k equipos jugaron juntos ese día 29 printf ( " % d-% d " , k, h); // El equipo k y el equipo h jugaron 30 v [h] = 1 ; // Marca el equipo h para dejar de jugar hoy 31 v [k] = 1 ; //El equipo de Mark k no jugará hoy 32 a [k] [h] = 1 ; // Mark h y k han jugado hoy 33 jueces = 1 ; // Marca el final del jésimo juego, salta al siguiente descanso 34 ; 35 } 36 } 37 if (juez == 1 ) { // El final del jésimo juego, salta al siguiente 38 descanso ; 39 } 40 } 41 } 42 printf ( " \ n " ); 43 } 44 devuelve 0 ; 45 }