【算法设计与分析】拉丁矩阵问题——对于给定的m和n,计算出不同的宝石排列方案数。

news2024/11/25 3:12:58

问题描述

  现有n种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵,m≤n,使矩阵中每行和每列的宝石都没有相同的形状。试设计一个算法,计算出对于给定的m和n,有多少种不同的宝石排列方案。

数据输入

  由文件input.txt给出输入数据。第1行有2个正整数m和n(0<m≤n<9)。

运行结果

  共有n种形状的宝石,排成m行n列,每一行和每一列的宝石都没有相同的形状,即每行都有n种宝石,只需将n种宝石全排列,判断每一列是否有相同形状的宝石即可。
  设n和m都为3,编写代码,运行程序,得到的排列方案数为12。
在这里插入图片描述

代码

#include<stdio.h>
#define n 3
#define m 3

int a[m][n];
int count = 0;

//判断数组的每行每列是否有重复的数,如果有,返回false;否则,返回true
bool ok(int x, int y) 
{
	for (int i = 0; i < x; i++)
		if (a[i][y] == a[x][y])
			return false;
	for (int j = 0; j < y; j++)
		if (a[x][j] == a[x][y])
			return false;
	return true;
}
//进行回溯
void traceback(int x, int y) 
{
	int temp;
	//排列并判断,在每行每列没有重复的情况下
	for (int i = y; i < n; i++) 
	{
		temp = a[x][y];
		a[x][y] = a[x][i];
		a[x][i] = temp;
		if (ok(x, y)) {
			if ((x == m - 1) && (y == n - 1))   //如果走到最后一层,输出
			{
				count++;
			}
			else if ((x == m - 1) && (y != n - 1))   //如果走到最后一行但不是最后一列,列加一
				traceback(x, y + 1);
			else if ((x != m - 1) && (y == n - 1))   //如果走到最后一列但不是最后一行,行加一,列变成第一列
				traceback(x + 1, 0);
			else        //否则,继续回溯,列加一
				traceback(x, y + 1);
		}
		temp = a[x][y];
		a[x][y] = a[x][i];
		a[x][i] = temp;
	}
}
int main()
{
	//给数组进行赋值
	for (int i = 0; i < m; i++) 
	{
		for (int j = 0; j < n; j++)
			a[i][j] = j + 1;
	}
	traceback(0, 0);
	printf("宝石的排列方案共有 %d 种\n", count);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 基础进阶篇(三):权限修饰符、final 关键字与枚举

文章目录 一、权限修饰符二、final 关键字2.1 final 作用2.2 final 修饰变量举例2.3 常量三、枚举3.1 枚举的格式3.2 枚举的特征3.3 枚举的应用 一、权限修饰符 权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符&#xff1a; 有四种作用范围由小到大 (priv…

Unity 如何导入二进制Spine文件

Unity 如何导入二进制Spine文件 前言步骤1.修改拓展名2.修改参数3.导出文件4.导入文件5.修改材质球属性6.生成动画 参考 前言 总是忘记Spine导出二进制到Unity的设置&#xff0c;记录一下。 步骤 1.修改拓展名 纹理打包器也修改一下拓展名&#xff08;日常操作&#xff09;…

word@制表位和列数据对齐@填空下划线制作

文章目录 refs制表位(tab stop)制表位类型 制作对其的下划线填空表单&#x1f47a;利用前导符代替下划线制作待填空下划线 制表位对其列数据模拟简单表格测试数据设置引线使用标尺设置 FAQ refs Insert or add tab stops - Microsoft SupportUsing the ruler in Word - Micros…

GaN HEMT主要性能指标有哪些?宽禁带材料电性能测试方案

GaN HEMT器件性能的评估&#xff0c;一般包含静态参数测试&#xff08;I-V测试&#xff09;、频率特性&#xff08;小信号S参数测试&#xff09;、功率特性&#xff08;Load-Pull测试&#xff09;。静态参数&#xff0c;也被称作直流参数&#xff0c;是用来评估半导体器件性能…

JVM理论(一)-基础概念

JVM概述 JVM就是二进制字节码的运行环境,负责装载字节码到其内存,解释/编译为对应平台上的机器指令执行,每条java指令在java虚拟机规范中都有详细定义,包括如何取、处理操作数等;JVM特点如下 一次编译,到处运行&#xff08;各CPU的架构不同的情况下JVM为了实现跨平台,字节码指…

fastadmin使用PHPexcel上传文件处理兼容问题 (已解决)

介绍 fastadmin&#xff1a;支持使用7.0以上版本的PHP PHPexcel&#xff1a;不支持使用7.0以上的PHP版本 2.下载地址 https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8 3&#xff1a;解决兼容 将文件导入到vendor下面&#xff0c;创建一个函数来使用这个文件&…

5.8.10 TCP协议

5.8.10 TCP协议 我们通过一个实例来看一下TCP协议 如图 图中是六个IP数据报的前40个字节的内容&#xff0c;使用的是16进制数表示的&#xff0c;该数据报的背景如下图 主机H通过快速以太网连接Internet&#xff0c;主机H的IP地址是192.168.1.100&#xff0c;服务器S的IP地址是…

高迸发 架构设计方案

前言 ​​在实际生活业务场景开发中&#xff0c;在我们的网站知名度越来越大的时候&#xff0c;随之而来的就是业务体量越来越大&#xff0c;用户群体越来越大&#xff0c;随之而来的技术要求也越来越高&#xff0c;其中核心点对网站的稳定性要求是硬性的。如果一个系统都无法…

新装idea的一些常用设置

新装idea的一些常用设置 新安装的idea常用配置 1、提示内容忽略大小写 File -> Settings -> Editor -> General -> Code Completion -> Match case 2、修改字体大小 File -> Settings -> Editor -> Font -> Size 3、取消启动时自动打开最后开…

阿里云国际站:阿里云计算服务指的是什么?

标题&#xff1a;阿里云计算服务指的是什么&#xff1f; 一、阿里云计算服务的定义   阿里云计算服务&#xff0c;是阿里巴巴集团旗下的云服务平台&#xff0c;提供了从云服务器、云数据库到大数据处理等丰富的云计算服务。它通过构建一种共享的计算资源池&#xff0c;使得用…

《SpringBoot》第05章 配置文件解析

前言 SpringBoot中的application.properties(或application.yaml)文件都是再熟悉不过的了。它是应用的配置文件&#xff0c;我们可以把需要的一些配置信息都写在这个文件里面&#xff0c;需要的时候&#xff0c;我们可以通过Value注解来直接获取即可&#xff0c;那这个文件是什…

deepstream指北——python接口的使用

目录 一、机器配置二、环境配置三、运行实例 一、机器配置 电脑&#xff1a;台式机系统&#xff1a;Ubuntu 20.04.5显卡&#xff1a;GTX 1070&#xff0c;8G显存软件版本&#xff1a;deepstream&#xff1a;6.1.1显卡驱动版本&#xff1a;515.76CUDA版本&#xff1a;11.7.1cud…

基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

当赛博朋克碰上小鸡舞 segment anything

Segment Anything能给我们做什么 前言内容具体实现成果 前言 最近&#xff0c;大模型的热度确实是非常非常的高&#xff0c;从chatgpt到segment anything&#xff0c;这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥&#xff0c; 想想能不能用大模型整点花活…

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

uniapp 之 多端实现图片压缩(含H5实现)

compressImage 说明 文档平台差异说明已标出&#xff1a;官网提供的api uni.compressImage除了H5平台&#xff0c;其余平台都支持&#xff0c;所以我们利用条件编译&#xff0c;然后单独处理一下H5的图片压缩即可。 utils.js 里面封装一下该方法&#xff0c;方便调用 /*** 图…

-Xloggc:d:/gc.log

-Xloggc:d:/gc.log把信息记录成 log文件参数-Xmx20m -Xms20m -XX:NewRatio4 -XX:SurvivorRatio2 -Xss1m -XX:PrintGCDetails -XX:UseSerialGC -XX:PrintCommandLineFlags -Xloggc:d:/gc.log结果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3PpljS…

【PyTorch API】 nn.RNN 和 nn.LSTM 介绍和代码详解

文章目录 1. nn.RNN 构建单向 RNN2. nn.LSTM 构建单向 LSTM3. 推荐参考资料 1. nn.RNN 构建单向 RNN torch.nn.RNN 的 PyTorch 链接&#xff1a;torch.nn.RNN(*args, **kwargs) nn.RNN 的用法和输入输出参数的介绍直接看代码&#xff1a; import torch import torch.nn as n…

商业模式画布

商业模式画布给了创业者一个思考的框架&#xff0c;在行动之前充分思考和演练。 文章目录 认识商业模式画布九个组成部分&#xff08;以Zoom为例拆解&#xff09;收入成本 九个组成部分的关系总结 认识商业模式画布 九个组成部分&#xff08;以Zoom为例拆解&#xff09; 收入 成…

七月创作之星挑战赛开始咯~

活动火热进行中&#xff01; 欢迎各位大佬积极参与~ 大家请加入卡奥斯开源社区官方社群哦&#xff0c;最新活动实时更新&#xff01; 还有专属群内福利&#xff08;蛋糕券、购物卡、周边礼品&#xff09;等你来拿~ 礼品详情