优雅的二维数组循环赋值

[size=medium]最近在 C++ 博客上看到了一段优雅的二维数组赋值代码,学习了一下。
作者为了实现图片中特定效果的二维数组,参考迷宫问题设计了一个优雅的算法,算法的基本思想就是对二维数组按照从外到内的方式赋值,在赋值的过程中加入了对二维数组边界的判断,只需要一层循环就可以实现。整个赋值过程和四冲程发动机工作原理有点类似,循环往复,各种变量之间此消彼长,代码如下:
[/size]

const int ROW__ = 10;
const int COL__ = 10;
int mat[ROW__][COL__];

struct Position
{
int nRow;
int nCol;
};

int main(int argc, char* argv[])
{
Position offset[4];
//从左至右,行号不变,列号加一
offset[0].nRow = 0;
offset[0].nCol = 1;
//从上至下,行号加一,列号不变
offset[1].nRow = 1;
offset[1].nCol = 0;
//从右至左,行号不变,列号减一
offset[2].nRow = 0;
offset[2].nCol = -1;
//从下至上,行号减一,列号不变
offset[3].nRow = -1;
offset[3].nCol = 0;

Position curPos;
curPos.nRow = 0;
curPos.nCol = 0;
mat[0][0] = 1;

int nOffset = 0;

Position tempPos;
for (int i = 1; i < ROW__*COL__; i++)
{
// nOffset % 4 ------> 右->下->左->上 循环
tempPos.nRow = curPos.nRow + offset[nOffset % 4].nRow;
tempPos.nCol = curPos.nCol + offset[nOffset % 4].nCol;

if (tempPos.nRow >= ROW__ || tempPos.nRow < 0
|| tempPos.nCol >= COL__ || tempPos.nCol < 0 // 不超过边界
|| mat[tempPos.nRow][tempPos.nCol] > 0) // 已经有值
{
i--;
nOffset++;
continue;
}

curPos = tempPos;
mat[curPos.nRow][curPos.nCol] = i + 1;
}

return 0;
}
jQuery中,给div下的所有li标签赋值 jQuery中$.each()的几种常用方法(听说阿里、腾讯、美团的面试题都会出) 利用each()函数和json数组给div下所有的li标签赋值 阅读详情

相关推荐

Excel VBA实战:用自定义函数优雅实现二维数组拼接(附完整代码)

本文深入剖析了Excel VBA中ReDim Preserve无法直接追加行数据的核心痛点,并提供了一个工业级的自定义函数解决方案。该函数能优雅地实现二维数组的纵向拼接,智能处理列数不一致、下标不统一等复杂场景,提升数据处理效率与代码可维护性。

ik678901的博客 672

二维数组循环赋值c语言,C/C++ 定义并赋值二维数组

本文转载的是优快云大大MoreWindows的博客在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别三个方面讲解:一.动态申请列大小固定的二维数组二.C语言中动态申请连续的二维数组三.C++语言中动态申请连续的二维数组一.动态申请列大小固定的二...

weixin_28937395的博客 6727

C++二维数组初始化全解析:从基础到现代C++的优雅实践

数组初始化是编程中的基础概念,它确保变量在创建时具有确定的初始值,避免未定义行为。其原理在于编译器或运行时系统为变量分配内存并赋予初始值的过程。正确的初始化技术价值在于提升代码的健壮性、可维护性和性能,尤其在涉及内存操作时。应用场景广泛,从嵌入式系统到高性能计算都需要处理数组初始化。本文聚焦于C++中二维数组初始化的多种方法,深入探讨了memset的高效使用与潜在风险,以及动态链接库(DLL)初始化失败等边界情况的排查,帮助开发者根据具体场景选择最合适的初始化策略。

weixin_34174322的博客 359

使用一个循环给二维数组赋值

a[i/4][i%4] = i+1;

weixin_44193991的博客 1104

信息学奥赛实战解析:蛇形填数算法的二维数组高效实现

本文深入解析信息学奥赛经典题目“蛇形填数”的高效实现方法。通过对比“移动焦点法”与“按圈赋值法”两种核心思路,详细阐述了如何利用方向数组、边界判断与状态转换等技巧,在二维数组中实现高效、健壮的蛇形路径填充,助力竞赛选手夯实基础、提升解题能力。

weixin_29212867的博客 378

C++二维数组与矩阵运算:从内存布局到高性能优化实战

在C++编程与高性能计算领域,理解数据在内存中的组织方式是优化程序性能的基础。计算机内存以线性地址空间组织数据,CPU缓存则依赖空间局部性原理加速访问。二维数组作为矩阵的常见表示,其内存布局(如行优先存储)直接影响缓存命中率与计算效率。在图形处理、科学计算及机器学习底层等场景中,高效的矩阵运算是核心需求。通过分析内存访问模式、运用循环重排等技术优化缓存利用率,能显著提升矩阵乘法等核心运算性能。本文以C++二维数组为切入点,深入探讨了矩阵运算的实现原理、常见的内存管理陷阱,并对比了动态数组的不同实现方式及其对

weixin_27032989的博客 259

C语言 第五章 数组 重点 典型题

一、概念 二、重点代码(书本) 三、重点题目

weixin_40377925的博客 5195

别再手动改数据了!用Simulink Assignment模块批量处理数组,效率翻倍(附2维数组实战)

本文详细介绍了Simulink Assignment模块在二维数组批量赋值中的高效应用,通过索引机制实现自动化操作,显著提升控制系统建模与仿真的效率。文章包含实战案例和配置步骤,帮助工程师快速掌握这一技术,适用于参数表更新等复杂场景。

weixin_30752699的博客 356

二维数组的定义,赋值,使用for循环给二维数组赋值,使用增强型for循环遍历二维数组

package com.Array; public class test { public static void main(String[] args) { // 学会二维数组的定义,初始化,循环赋值 // 用第一种方法定义二维数组 int intArray[][]; // 用第二种方法定义二维数组 int[] intArray1[]; // 用第三种方法定义二维数...

IGGIRing的博客 2万+

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程

本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。

k9l0m1的博客 481

OpenIddict实战指南:在.NET Core中构建安全的OAuth 2.0与OpenID Connect服务

本文详细介绍了如何在.NET Core中使用OpenIddict框架构建安全、标准的OAuth 2.0与OpenID Connect授权服务。内容涵盖从快速搭建授权服务器、理解核心配置与授权流程,到集成用户数据库、实现完整登录授权,以及生产环境下的安全加固与部署指南,为.NET开发者提供了一套现代、可维护的认证授权解决方案。

weixin_29229989的博客 355

【C++】如何优雅地把二维数组初始化为0

2023年12月7日,周四上午。

m0_61629312的博客 7470

STM32CubeMX定时器进阶玩法:用编码器模式实现电机转速测量(附避坑清单)

本文详细介绍了如何使用STM32CubeMX配置定时器的编码器模式实现电机转速测量,包括硬件连接、CubeMX配置关键步骤、转速计算算法及常见问题解决方案。特别针对工业控制和机器人开发中的高精度需求,提供了实用的避坑清单和优化技巧,帮助开发者高效完成项目。

joy55的博客 203

使用“一层”for循环实现二维数组赋值操作

使用一层for循环实现对二维数组的快速赋值

weixin_46089415的博客 1655

详述字符集与汉字编码

字符集与字符编码是文本处理的基础概念。字符集定义字符集合(如ASCII、GB2312、Unicode),字符编码则规定字符如何存储为二进制数据。汉字编码经历了从区域化(GB2312、GBK、BIG5)到全球化(Unicode)的演进,Unicode通过UTF-8、UTF-16等编码方案实现跨语言兼容。UTF-8因兼容ASCII、节省空间且无乱码风险,成为中文互联网的主流编码。正确处理编码问题需统一标准、明确声明格式,并注意生僻字的特殊处理。

零零发不爱ai的博客 805

lammps教程:in文件结构详解以及一个比较实用的in文件模板

lammps软件只是一个求解器,没有可视化的前处理和后处理软件,所有的命令只能通过代码的方式输入到求解器进行求解计算。 所有的命令都被写到一个称为“in”的文件里,对于初学者来说,熟悉in文件的编写是一个难点。 in文件其实就是一个文本文档,也没有要求文件名或者后缀名中必须带有“in”字样,用任何文件名均可运行。 in文件里的代码是按照编写的顺序进行解释执行,对于大部分命令行来说,前后顺序影响并不是很大,但是,对于一些命令,在执行过程中需要某个参数,则这个参数的定义和计算必须写在命令执行之前。 例如,对晶体

lammps_jiayou的博客 2万+

JavaScript 技巧:将二维数组优雅地转换为对象的四种方法

我们探索了四种将二维数组转换为对象的方法,从经典到现代,各有千秋。for...of循环是理解底层逻辑的最佳选择,且性能表现优异。forEach是一个不错的函数式替代品。reduce在构建复杂的、链式的函数式操作时威力巨大。则是为解决这一特定问题而生的“银弹”。最终建议在您的现代 JavaScript 项目(任何 2019 年之后的项目)中,请始终优先使用。它的简洁性、可读性和明确的意图,使其成为无可争议的最佳选择。如果需要兼容非常古老的环境,或者在性能极其敏感的核心循环中,for...of。

weixin_42107409的博客 774

Veritas NetBackup8.1.1客户端安装

1.在客户机打开安装包运行Browser 2.选择NetBackup Client Software Installation 3.下一步 4.接受,下一步 5.我选择自定义安装,下一步 6.我选择安装到D盘 7.默认下一步 8.使用域管理账户 9.输入服务器安装了服务端的那一台名称 10.输入服务端生成的令牌,选择“I recognize the fingerprint for this host.Proceed with the certificate deploymen”下一步

万物皆可学 2万+

一维数组、二维数组,真有那么简单?不整明白,Bug真不简单!

想象一下,你在超市买水果,如果每次买苹果都得单独开个袋子、写个标签,你会不会疯?所以,聪明的超市搞了个货架——“苹果货架”,一堆苹果井然有序地排列好。数组(Array),就是Java程序里的“货架”!用来有序存储一堆相同类型的数据。数组的存在,就是为了让程序员告别“一个一个变量堆着写”的反人类时代。线性排列的一串数据。图示感受一下👇[ 苹果 ][ 苹果 ][ 苹果 ][ 苹果 ][ 苹果 ]索引 0 索引 1 索引 2 索引 3 索引 4数组里的数组。[ [苹果, 香蕉, 梨] ,

欢迎来到菜鸟不学编程的博客 990

基于STM32LXXX的模数转换芯片ADC(CMS24AD2001)驱动C程序设计

/ 电压 = (原始值 / 2^23) * Vref (注意:24位有符号数范围为 -2^23 到 2^23-1)//---------------- 硬件端口映射 (请根据实际电路修改) ----------------ADC_SCLK_HIGH();- PGA 放大倍数可选:1、2、4、8、16、32、64、128、256;//---------------- 宏定义操作 -------------------//---------------- 函数声明 -------------------

myron6688的博客 160

硅电容的工艺结构原理及选型参数总结

硅电容,也称为硅质电容或硅二极管电容,是一种特殊的电容器。它利用硅二极管的结构来实现电容的功能。本文对硅电容的工作原理,结构特点,选型参数及设计注意事项进行总结。

fydar的博客 2332

Ruby语言的循环实现

程序设计中的循环结构是控制程序执行流程的重要组成部分。无论是数据处理、算法实现,还是图形界面开发,大多数程序在某些时刻都需要重复执行某一段代码。Ruby语言作为一种优雅且易于阅读的语言,提供了多种循环结构,以满足不同的需求。本文将深入探讨Ruby语言的循环实现,涵盖whileuntilfor和each等循环构造,同时也将探索它们的使用场景、性能考虑以及一些最佳实践。

2501_90231577的博客 411

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JavaScript 二维数组初始化

本文介绍了JavaScript中二维数组初始化的常见错误及正确方法。初学者常犯两种错误:直接赋值未初始化的数组元素,或让多行引用同一子数组导致修改联动。推荐使用fill+map或Array.from方法创建独立子数组,如Array.from({length:n},()=>new Array(n).fill(0))。文中通过温度矩阵示例和UML图展示了二维数组结构,并附编程术语表,强调正确初始化对避免引用错误的重要性。掌握这些方法能有效处理矩阵运算等场景。

小猫三两只。 1697

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

二维数组越界问题简单解决

空间换时间/简洁性:多开几个单位的数组空间,能省掉几十行判断边界的代码。坐标映射:在处理string(0起步)和int数组(建议1起步)时,脑子里要有一张映射表。调试技巧:如果结果不对,先检查for循环的起止点,再检查if里的==。学习建议:下次遇到任何涉及到“上下左右邻居”的题目(比如走迷宫、细胞自动机),第一时间记得挖好你的“护城河”!

2202_75285054的博客 1328

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C/C++循环结构全解析:从基础语法到嵌套循环与流程控制

循环是程序设计中实现重复执行的核心控制结构,其原理是通过条件判断决定代码块是否重复执行,从而提升代码复用性和执行效率。在C/C++语言中,while、do while和for循环分别适用于不同场景,而break与continue语句则提供了精细的流程控制能力。掌握循环嵌套结构对于处理多维数据、实现复杂算法至关重要,例如在遍历二维数组或打印图形时,嵌套循环能有效组织代码逻辑。本文聚焦于C/C++循环语句的深度解析,通过大量可运行代码示例,系统讲解循环嵌套与流程控制的最佳实践,帮助开发者避免死循环和逻辑错误,构

weixin_33924770的博客 373

Python流程控制语句(六):循环语句、循环控制语句、pass语句

前言:在Python编程语言中,流程控制语句是构建程序逻辑的基础构件之一。它们决定了程序中语句的执行顺序,允许我们创建更加复杂和动态的代码结构。在众多流程控制语句中,循环语句和循环控制语句尤为重要,因为它们使我们能够重复执行一段代码,直到满足特定的条件,这对于处理迭代任务和批量操作至关重要。此外,`pass`语句虽然看起来简单,但在Python编程中扮演着不可或缺的角色。它作为一个空操作,确保了代码的语法正确性,同时提供了一个占位符,使得程序员可以在代码结构中预留位置。

weixin_66855479的博客 1106
上一篇: 10 types of programmers
下一篇: 第一次升级 FreeBSD
arust
博客等级 码龄20年 6粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值