跳到主要内容

矩阵填充问题

二维数组

const int M = 5;
const int N = 5;
int matrix[M][N];

代码解释

#include <iostream>
using namespace std;

/**
* 矩阵填充
* @param matrix matrix为总矩阵
* @param size 为剩余矩阵大小
* @param num 要填充的第一个数
* @param offset 为剩余矩阵在总矩阵中的位置
*/
void FillMatrix(int matrix[N][N], int size, int num, int offset)
{
// 递归中止条件1
if(size == 0)
return ;
// 递归中止条件2
if(size == 1)
matrix[offset][offset] = num;
return ;
// 先填充外围
for(int i = 0; i < size - 1; i++)
{
matrix[offset + 1][offset] = num + 1;
matrix[offset + size - 1][offset + 1] = size - 1 + i;
matrix[offset + size - 1 - i][offset + size - 1] = num + 2 * (size - 1) + i;
matrix[offset][offset + size - 1 - i] = num + 3 * (size - 1) + i;
}
// 在递归填充内核(小了一圈的矩阵)
FillMatrix(matrix, size - 2, num + 4 * (size - 1), offset + 1)
}