欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 蓝桥杯算法题 -蛇形矩阵(方向向量)

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

2025/5/15 21:36:23 来源:https://blog.csdn.net/2401_87692970/article/details/147860599  浏览:    关键词:蓝桥杯算法题 -蛇形矩阵(方向向量)

在这里插入图片描述

在这里插入图片描述
🎁个人主页:工藤新一¹

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

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

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


文章目录

  • P5731 【深基5.习6】蛇形方阵
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
  • 算法原理
    • 一、方向向量(矩阵、搜索通用解法)
    • 二、代码实现

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  412 13 14  511 16 15  610  9  8  7

说明/提示

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


算法原理

  • 解法:模拟填数的过程

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

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

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


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

在这里插入图片描述


二、代码实现

#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;
} 

在这里插入图片描述


在这里插入图片描述

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词