首页 > 其他分享 >蛇形填数(矩阵)

蛇形填数(矩阵)

时间:2022-11-28 18:39:11浏览次数:60  
标签:++ 矩阵 tot int while 填数 maxn 蛇形 &&


蛇形填数

       在 n x n 方针里填入 1,2,...,n x n,要求填成蛇形。例如:n=4时方阵为:

10 11 12 1

9   16 13 2

8   15 14 3

7     6   5 4

上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n <= 8。

【分析】

       类比数学中的矩阵,可以用一个二维数组来储存题目中的方阵。只需声明一个“int a[maxn][maxn]”,就可以获得一个大小为 maxn x maxn的方阵。在声明时,二维的大小不必相同,因此也可以声明 int a[30][50]这样的数组,第一维下标范围是 0,1,2,...,29,第二维下标范围是0,1,2,...,49。

       从1开始依次填写。设“笔”的坐标为(x,y),则一开始x=0,y=n-1,即第0行,第n-1列(行列的范围是 0~n-1,没有第n列)。“笔”的移动轨迹是:下,下,下,左,左,左,上,上,上,右,右,下,下,左,上。总之,先是下,到不能填为止,然后是左,接着是上,最后是右。“不能填”是指再走就出界(例如4到5),或者再走就要走到以前填过的格子(例如12到13)。如果把所有格子初始化为0,就能很方便地加以判断。

用c语言编写程序,代码如下:

<span style="font-size:18px;">#include<stdio.h>
#include<string.h>

#define maxn 20
int a[maxn][maxn];

int main() {
int n, x, y, tot = 0;
scanf("%d", &n);
memset(a, 0, sizeof(a));
a[x = 0][y = n - 1] = tot = 1;
while (tot < n * n) {
while (x + 1 < n && !a[x + 1][y]) a[++x][y] = ++tot;
while (y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = ++tot;
while (x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = ++tot;
while (y + 1 < n && !a[x][y + 1]) a[x][++y] = ++tot;
}
for (x = 0; x < n; x++) {
for (y = 0; y < n; y++)
printf("%3d", a[x][y]);
printf("\n");
}
return 0;
}</span>



运行程序,输入 4,结果如下:

蛇形填数(矩阵)_蛇形填数

标签:++,矩阵,tot,int,while,填数,maxn,蛇形,&&
From: https://blog.51cto.com/u_15894233/5893350

相关文章

  • 【白话模型量化系列一】矩阵乘法量化
    模型量化是模型加速方向一个很重要的方法,主要思想就是用int8数据格式来存储和进行计算。这样做有两点好处:可以减小模型存储的体积。原本float32存储需要4个字节,现在int8存储......
  • 每日算法之矩阵中的路径
    JZ12矩阵中的路径描述请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以......
  • 【首发】徐亦达团队新论文推荐:模限界矩阵分解
    徐亦达团队在IEEETransactionsonKnowledgeandDataEngineering的发表了一篇机器学习论文MagnitudeBoundedMatrixFactorisationforRecommenderSystems(模限界矩阵......
  • 二维差分矩阵
    二维差分始终记住对b[i][j]修改会影响a数组中从a[i][j]及往后的每一个数。b[x1][y1]+=c;对应图1,让整个a数组中蓝色矩形面积的元素都加上了c。b[x1][y2+1]-=c;......
  • 动态规划算法图文详解(Kotlin语言):二维矩阵中找到只包含 1 的最大正方形(LeetCode-22
    题目描述在一个由0和1组成的二维矩阵内,找到只包含1的最大正方形,并返回其面积。示例:输入:1010010 ​​​11​​​ 111 ​​​11​​​ 110010输出:4......
  • 斐波那契数的矩阵算法及 python 实现
    importnumpyasnpimportmatplotlib.pyplotaspltfromfunctoolsimportreducefromsympyimportsqrt,simplify,fibonacciimportsympy斐波那契数的矩阵形式......
  • [边数限制最短路 倍增floyd 矩阵优化]Cow Relays G
    [边数限制最短路倍增floyd矩阵优化]CowRelaysG题目思路边数限制的最短路?bellman_ford可以拿来解决边数<=k的最短路,但这题是边数恰好为k,可以通过奇妙操作改成恰好经过k......
  • LeetCode 240.搜索二维矩阵II(中等)
    题目描述:编写一个高效的算法来搜索 ​​m x n​​​ 矩阵​​matrix​​​中的一个目标值​​target​​。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的......
  • 算法基础:子矩阵的和
    算法:子矩阵的和以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵的和为:s[x2,y2]-s[x1-1,y2]-s[x2,y1-1]+s[x1-1,y1-1]#include<bits/stdc++.h>using......
  • 稀疏矩阵习题
    已知一个6*5稀疏矩阵如下所示,(1)写出它的三元组顺序表(线性表);(2)给出三元组顺序表(线性表)的顺序存储表示。(2)行数列数非零元素个数655将在进行保存时,需要把矩阵中的行数,列数,非零元......