博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建一个n×n的unique矩阵
阅读量:4098 次
发布时间:2019-05-25

本文共 1207 字,大约阅读时间需要 4 分钟。

原文地址:

已知一个奇数n,根据下面的条件得到一个n×n大小的矩阵:

  • 每个元素是1到n之间的一个整数(包含1和n);
  • 在同一行,同一列没有相同的数字;
  • 所有的1必须距矩阵的中心任意可能的距离,对于一个奇数n,n×n的矩阵中心是cell ((n-1)/2, (n-1)/2)。

输出:

Input  : n = 1Output : 1Input : n = 3Output: 3 2 1        1 3 2        2 1 3Input : n = 5Output : 5 3 2 4 1          1 4 3 5 2          2 5 4 1 3          3 1 5 2 4          4 2 1 3 5

首先要定下来1的位置。当n=5的时候,这里有一种1的可能位置:

_ _ _ _ 1 1 _ _ _ _ _ _ _ 1 _ _ 1 _ _ _ _ _ 1 _ _

一旦我们定下了1的位置,填补剩下的项就比较简单了。我们逐列填充剩下的数字。对于每个1,我们遍历这个列,在1下面用2, 3,…p来填充,上面用p+1, .. n填充,于是得到下面的矩阵:

5 3 2 4 1 1 4 3 5 2 2 5 4 1 3 3 1 5 2 4 4 2 1 3 5

为了定下1的初始位置,我们遍历所有的行,并跟踪“left”与“right”两列的数字。

  • “right”始于n-1,然后在轮过每一行后做递减;
  • “left”始于0,然后在轮过每一行后做递增;

以下是上面想法的C++实现

// C++ program to construct an n x n matrix such that// every row and every column has distinct values.#include 
#include
using namespace std;const int MAX = 100;int mat[MAX][MAX];// Fills non-one entries in column j// Given that there is a "1" at position mat[i][j],// this function fills other entries of column j.void fillRemaining(int i, int j, int n){ // Initialize value to be filled int x = 2; // Fill all values below i as 2, 3, ...p for (int k=i+1; k

输出:

5 3 2 4 1 1 4 3 5 2 2 5 4 1 3 3 1 5 2 4 4 2 1 3 5

转载地址:http://azhii.baihongyu.com/

你可能感兴趣的文章
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
听说玩这些游戏能提升编程能力?
查看>>
7 年工作经验,面试官竟然还让我写算法题???
查看>>
被 Zoom 逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
查看>>
上古语言从入门到精通:COBOL 教程登上 GitHub 热榜
查看>>
再见,Eclipse...
查看>>
超全汇总!B 站上有哪些值得学习的 AI 课程...
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
神器面世:让你快速在 iOS 设备上安装 Windows、Linux 等操作系统!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
太赞了!GitHub 标星 2.4k+,《可解释机器学习》中文版正式开放!
查看>>
程序员用 AI 修复百年前的老北京视频后,火了!
查看>>
漫话:为什么你下载小电影的时候进度总是卡在 99% 就不动了?
查看>>
我去!原来大神都是这样玩转「多线程与高并发」的...
查看>>
当你无聊时,可以玩玩 GitHub 上这个开源项目...
查看>>
B 站爆红的数学视频,竟是用这个 Python 开源项目做的!
查看>>
安利 10 个让你爽到爆的 IDEA 必备插件!
查看>>
自学编程的八大误区!克服它!
查看>>
GitHub 上的一个开源项目,可快速生成一款属于自己的手写字体!
查看>>
早知道这些免费 API,我就可以不用到处爬数据了!
查看>>