【组合数学】36军官问题

简介: 问题描述:     据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。

问题描述:

     据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。他希望这36名军官排成6×6的方阵,方阵的每一行,每一列的6名军官来自不同的部队并且军衔各不相同。令他恼火的是,无论怎么绞尽脑汁也排不成。
后来,他去求教瑞士著名的大数学家欧拉。欧拉发现这是一个不可能完成的任务。
来自n个部队的n种军衔的n×n名军官,如果能排成一个正方形,每一行,每一列的n名军官来自不同的部队并且军衔各不相同,那么就称这个方阵叫正交拉丁方阵。欧拉猜测在
n=2,6,10,14,18,…
时,正交拉丁方阵不存在。然而到了上世纪60年代,人们用计算机造出了n=10的正交拉丁方阵,推翻了欧拉的猜测。现在已经知道,除了n=2,6以外,其余的正交拉丁方阵都存在,而且有多种构造的方法

数学模型的建立:

    为了解决上面的排列组合问题,我们可以建立数学模型,将上述问题转化为:能不能把36个有序对(i,j)(i=1,2,……6;j= 1,2,……6 )排列成一个6×6的矩阵,使得该矩阵的每一行每一列上整数 1,2,……6能够以某种顺序出现?(觉得和数独是不是有点类似,但是有附加条件)

模型的求解:

    我们可以将这样的矩阵分割为两个 6×6的矩阵,一个对应于有序对的第一个位置(军衔矩阵),另一个对应有序对的另一个位置(军团矩阵)。这样问题可以描述如下:
    1)这两个矩阵 的每一行每一列上整数 1,2,……6能够以某种顺序出现
    2)当并置这两个矩阵时,所有有序对(i,j) (i=1,2,……6;j= 1,2,……6 )全部出现

上面矩阵比较大,我们以来自3个军团3个级别军衔的9个军官为例,可以得到问题的解(可以笔算得到)如下:

从上图可以看出,军衔矩阵和军团矩阵都是3阶拉丁方阵,并且两者并置得到的并置矩阵得到了所有可能的9个有序对(i,j)。这种情况下,我们称军衔矩阵和军团矩阵是正交的,并置矩阵称为正交拉丁方阵。

    很明显,3阶正交拉丁方阵是存在的,对于36军官问题,也就是要求证6阶正交拉丁仿真是否存在。前面已经提到, 除了阶数n=2,6以外,其余的正交拉丁方阵都存在,而且有多种构造的方法

对于正交拉丁方阵的构造,由于比较复杂,有时间再研究,下面给出拉丁方阵的具体实现:
#include<iostream>
using namespace std;
void main()
{
 int n,i,j,count;
 int Num[20];//这里可以输入的阶数n的最大值是,可以自己修改
 cout<<"请输入方阵阶数:";
 cin>>n;
 for(i=0;i<n;i++)      //给数组赋初始值
 {
    Num[i]=i+1;
 }
 for (i = 0;i < n;i++)     //外循环输出n行
 {
  for (j = i,count=1;count<= n;count++)     //内循环输出一行的每个数字
  {
   cout<<Num[j%n]<<'\t';
    j++;
  }
  printf("\n");
 }
}

原文:http://blog.csdn.net/tengweitw/article/details/30265107

作者:nineheadedbird









目录
相关文章
lua字符串与十六进制数据转换
lua字符串与十六进制数据转换
503 2
|
前端开发 小程序 API
【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
|
9月前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
361 10
|
11月前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
545 4
构建高可用性GraphRAG系统:分布式部署与容错机制
非对称式多谐振荡电路的介绍
非对称式多谐振荡电路:实现多频率稳定振荡的关键 引言: 非对称式多谐振荡电路是一种能够产生多个频率的振荡信号的电路结构。它通过非对称的反馈回路和多个谐振网络的组合来实现多频率的振荡。本文将介绍非对称式多谐振荡电路的原理、应用、设计与实现方法,以及其优缺点。 一、原理 非对称式多谐振荡电路的原理是通过放大器和反馈回路的相互作用来实现多频率的振荡。具体原理如下: 1. 初始状态:当电路开始工作时,放大器的输出信号为零。 2. 放大器放大信号:输入信号经过放大器放大后,形成一个较大的输出信号。 3. 反馈信号:放大器的输出信号被送回到反馈回路中,与输入信号相叠加形成反馈信号。 4. 正反
407 0
|
API Android开发
32. 【Android教程】对话框:AlertDialog
32. 【Android教程】对话框:AlertDialog
317 2
|
数据采集 JSON JavaScript
jsoup爬虫发送get、post请求、解析html、获取json
jsoup爬虫发送get、post请求、解析html、获取json
1081 0
|
人工智能 小程序 机器人
开源一个RAG大模型本地知识库问答机器人-ChatWiki
准备工作 再安装ChatWiki之前,您需要准备一台具有联网功能的linux服务器,并确保服务器满足最低系统要求 • Cpu:最低需要2 Core • RAM:最低需要4GB 开始安装 ChatWiki社区版基于Docker部署,请先确保服务器已经安装好Docker。如果没有安装,可以通过以下命令安装:
723 0
|
Web App开发
PanTools v1.0.27 多网盘批量管理、遍历分享、转存、重命名、复制...
一款针对多个热门网盘的文件管理、批量分享、批量转存、批量重命名、批量复制、批量链接检测、跨账号移动文件、多账号文件搜索等,支持不同网盘的不同账号的资源文件操作。适用于网站站长、资源爱好者、网盘拉新等,对于管理名下具有多个网盘多个账号具有实用的效果。
477 0
|
存储 算法 C语言
十字链表法,十字链表压缩存储稀疏矩阵详解
十字链表法,十字链表压缩存储稀疏矩阵详解
十字链表法,十字链表压缩存储稀疏矩阵详解