本文共 1207 字,大约阅读时间需要 4 分钟。
原文地址:
已知一个奇数n,根据下面的条件得到一个n×n大小的矩阵:
输出:
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”两列的数字。
以下是上面想法的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/