蓝桥杯算法题 -蛇形矩阵(方向向量)


🎁个人主页: 工藤新一¹

🔍系列专栏: C++面向对象(类和对象篇)

🌟心中的天空之城,终会照亮我前方的路

🎉欢迎大家点赞👍评论📝收藏⭐文章


文章目录

P5731 【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 9 9 的正整数 n n n,输出 n × n n\times n n×n

的蛇形方阵。

从左上角填上 1 1 1 开始,顺时针方向 依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n n n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

输入输出样例 #1

输入 #1

复制代码
4

输出 #1

复制代码
  1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

说明/提示

数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1≤n≤9。


算法原理

  • 解法:模拟填数的过程

一、方向向量(矩阵、搜索通用解法)

方向向量常常适用于解决矩阵中填数的场景,然后根据规则结合方向向量填数




  • 处理越界情况,并 使 pos 成环形移动

二、代码实现

cpp 复制代码
#include<iostream>
using namespace std;

const int N = 15;

//定义方向向量 (右、下、左、上 四个方向) 
int dx[] = { 0, 1, 0, -1 };
int dy[] = { 1, 0, -1, 0 };

int arr[N][N];

int main()
{
	int pos = 0;//控制偏移量(当前的方向) 
	int n; cin >> n;
	
	//模拟填数过程
	 
	//定义起始坐标(1,1),通过变量 cnt 进行填数操作 
	int x = 1, y = 1, cnt = 1;
	
	while(cnt <= n * n)
	{
		//为数组增添数据 
		arr[x][y] = cnt;
		
		//计算下一位置坐标(当前位置 + 对应的偏移量) 
		int a = x + dx[pos], b = y + dy[pos]; 	
		
		//进行越界处理
		if(a < 1 || a > n || b < 1 || b > n || arr[a][b] != 0)
		{
			//更新当前应走的正确方向(并使 pos 成环形,循环) 
			pos = (pos + 1) % 4;
			
			//那么重新计算正确的移动位置
		    a = x + dx[pos], b = y + dy[pos]; 
		}
			
		//更新计算好的正确位置 
		x = a, y = b; 
		cnt++; 
	}
    
    //循环输出...
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            printf("%3d", arr[i][j]);
        }
        puts("");//换行
    }
	return 0;
} 


🌟 各位看官好我是工藤新一¹呀~

🌈 愿各位心中所想,终有所致!

相关推荐
虾球xz32 分钟前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
fpcc1 小时前
跟我学c++高级篇——模板元编程之十三处理逻辑
c++
格林威2 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
Dream it possible!3 小时前
LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)
c++·leetcode·位运算·哈希表·哈希集合
?abc!4 小时前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue4 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
Dddle14 小时前
C++:this指针
java·c语言·开发语言·c++
不見星空5 小时前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯
jiunian_cn5 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
梁下轻语的秋缘5 小时前
每日c/c++题 备战蓝桥杯(洛谷P1387 最大正方形)
c语言·c++·蓝桥杯