zoukankan      html  css  js  c++  java
  • 分治法——循环赛日程表

    1、问题描述:
    有n=2^k个远动员选手,设计比赛日程表实现:
    (1)每个选手必须与n-1个选手比赛
    (2)每个选手一天只比赛一场
    (3)比赛共进行n-1天
    输入:n人
    输出:n行n-1列,第i行第j列表示第i个选手第j天遇到的对手,不包含第一列表示为选手编号

    举例:2人
         1   2
         2   1

    2、问题分析
    通过化大为小,分而治之的思想,将多人的比赛日程缩小为2人的日程。以此倒推所有人的日程。
    注意多人日程规律:
    以四人为例:
    1 2 | 3 4
    2 1 | 4 3
    ----------
    3 4 | 1 2
    4 3 | 2 1
    这样一个矩阵分为四个区,左上和右下一样,左下和右上一样,且右上是左上对应的数字加了n/2.

    3、代码实现
     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 #define N 128
     5 int matrix[N][N] = {0};
     6 
     7 void fun(int n)
     8 {
     9     int i;
    10     int j;
    11     if (n<=0)
    12     {
    13         return;
    14     }
    15     if (n>2)
    16     {
    17         fun(n/2);
    18         for (i=1;i<=n/2;i++)
    19         {
    20             for (j=n/2+1;j<=n;j++)
    21             {
    22                 matrix[i][j] = matrix[i][j-n/2] + n/2;
    23             }
    24         }
    25         for (i=n/2+1;i<=n;i++)
    26         {
    27             for (j=1;j<=n/2;j++)
    28             {
    29                 matrix[i][j] = matrix[i-n/2][j+n/2];
    30             }
    31         }
    32         for (i=n/2+1;i<=n;i++)
    33         {
    34             for (j=n/2+1;j<=n;j++)
    35             {
    36                 matrix[i][j] = matrix[i-n/2][j-n/2];
    37             }
    38         }
    39     }
    40     else
    41     {
    42         matrix[1][1] = 1;
    43         matrix[1][2] = 2;
    44         matrix[2][1] = 2;
    45         matrix[2][2] = 1;
    46     }
    47 }
    48 
    49 void main()
    50 {
    51     fun(8);
    52     
    53     int i,j;
    54     for (i=1;i<=8;i++)
    55     {
    56         for (j=1; j<=8; j++)
    57         {
    58             printf("%d ",matrix[i][j]);
    59         }
    60         printf("
    ");
    61     }
    62 }

    http://blog.chinaunix.net/uid-26874207-id-4206383.html?utm_source=jiancool

     
  • 相关阅读:
    Jmeter配置slave
    Jmeter集合ant进行操作
    PageObject设计模式进行自动化用例的设计方法
    同学,迭代器生成器了解一下
    面向对象的一些方法与属性
    断言与异常
    wtforms-表单生成及验证
    DBUtils--数据库连接池
    Flask请求流程超清大图
    PEP8规范
  • 原文地址:https://www.cnblogs.com/aabbcc/p/6508319.html
Copyright © 2011-2022 走看看