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

这篇具有很好参考价值的文章主要介绍了【算法设计与分析】拉丁矩阵问题——对于给定的m和n,计算出不同的宝石排列方案数。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

  现有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。
现有n种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵,算法,矩阵,开发语言,c++文章来源地址https://www.toymoban.com/news/detail-762173.html

代码

#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;
}

到了这里,关于【算法设计与分析】拉丁矩阵问题——对于给定的m和n,计算出不同的宝石排列方案数。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【动态规划】矩阵链乘法——算法设计与分析

    对于矩阵 U p × q U_{ptimes q} U p × q ​ 和 V q × r V_{qtimes r} V q × r ​ , Z p × r = U V Z_{ptimes r}=UV Z p × r ​ = U V ,共需计算 p q r pqr pq r 次标量乘法,时间复杂度为 Θ ( p q r ) Theta (pqr) Θ ( pq r ) 矩阵乘法满足结合律,即 ( U V ) W = U ( V W ) (UV)W=U(VW) ( U V ) W = U ( VW ) ,选择不同的结合

    2024年02月03日
    浏览(64)
  • 给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

    给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。 输入格式: 输入第一行给出正整数n(1n≤10);随后n行,每行给出n个整数,其间以空格分隔。 输出格式: 在一行中给出该矩阵除副

    2024年02月05日
    浏览(61)
  • 算法设计 || 第7题:TSP问题的成本矩阵

     看不懂可以观看这个老师视频学习:分支限界法(TSP问题,多段图的最短路径问题,任务分配问题,批处理作业调度问题)(算法设计第十周二节)_哔哩哔哩_bilibili     画出计算求解最优解的分支界限过程, 计算每个节点的C^(X)值。 一旦找到目标排列,再需要杀手的节点下面用B标记

    2024年02月10日
    浏览(41)
  • 【期末复习】计算机算法设计与分析

    小编相信大家都很急切,要如何短时间学会算法通过考试呢?下面就让楼主带大家一起了解吧。 算法期末考试,其实就是算法期末考试了。那么小编为什么会算法期末考试,相信大家都很好奇是怎么回事。大家可能会感到很惊讶,小编怎么会算法期末考试呢?但事实就是这样

    2024年02月03日
    浏览(43)
  • 计算机算法设计与分析期末复习

    以下是我的部分算法笔记,希望可以给复习的小伙伴们参考一下: 题目: 一切合法的输入数据都能得出满足要求的结果,包括典型的、苛刻的输入数据也能够得出满足要求的结果。这个含义对应算法的(正确性) 算法要对异常情况进行适当的处理,就是算法的(健壮性)

    2024年02月13日
    浏览(41)
  • 计算机算法设计与分析(第5版)PDF

    《计算机算法设计与分析(第5版)》是2018年电子工业出版社出版的图书,作者是 王晓东 。 整本书的结构 是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法。 网络上许多的算法文章都出自于这本书,该书成为了很多开发者学习算法

    2024年02月11日
    浏览(48)
  • 基于python爬虫技术对于淘宝的数据分析的设计与实现

    本文主要介绍通过 selenium 模块和 requests 模块,同时让机器模拟人在浏览器上的行为,登录指定的网站,通过网站内部的搜索引擎来搜索自己相应的信息,从而获取相应的商品信息,并进而获取数据,然后通过csv模块将数据存储到本地库中,接着在通过pandas、jieba、matplotl

    2024年02月03日
    浏览(64)
  • 资源分配问题【算法设计与分析】<动态规划问题>

    问题分析: ( 要把问题分为多步解决,每步求出子问题的多个最优策略后一步依赖于上一步的最有策略,最后一步得出问题的解) (1)首先要考虑分配给项目A的资金与利润的关系。得到此时投资数x与其相对应的 的关系。 (2)其次要考虑分配给前两个项目A,B的总资金 与利

    2023年04月08日
    浏览(39)
  • 【动态规划】01背包问题——算法设计与分析

    若超市允许顾客使用一个体积大小为13的背包,选择一件或多件商品带走,则如何选择可以使得收益最高? 商品 价格 体积 啤酒 24 10 汽水 2 3 饼干 9 4 面包 10 5 牛奶 9 4 0-1 Knapsack Problem 输入: quad - n n n 个商品组成集合 O O O ,每个商品有属性价格 p i p_i p i ​ 和体积 v i v_i v

    2024年02月04日
    浏览(79)
  • 【算法设计与分析】动态规划:数塔问题

    提示:头歌 算法作业 实验七 动态规划 第1关:数塔问题 本关任务:编写用动态规划解决数塔问题。 求解过程(自底向上) 决策结果输出过程(自顶向下) 将上述分析求解过程角标记录为 path数组 ,方便顺序输出结果 代码如下(不知题目给出三维数组的a的第三维我用处,去

    2024年02月11日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包