第十三课 二维数组(2)方向数组

大家好,我又来了,首先,庆祝一下本博主破二百粉了,开森!(*^▽^*),这几个月来感谢大家的支持,那么,正文开始!

我们上次讲了二维数组的声明以及初始化,那么今天,我带你们认识一个概念:方向数组。

方向数组常应用于搜索算法中,在c/c++中可以用二维数组来表示方向。例如二维数组akn含义就是方向数组里面储存了k个向量,而n则代表每个向量有n维(n一般为2)。

例题:

题目描述

请仿照样例打印n*n的盘蛇矩阵,用'\t'分隔

样例输入/输出

输入数据 1

复制代码
4

输出数据 1

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

输入数据 2

复制代码
5

输出数据 2

复制代码
1       2       6       7       15
3       5       8       14      16
4       9       13      17      22
10      12      18      21      23
11      19      20      24      25

数据规模与提示

时间限制:1000ms.

内存限制:256MB.

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,1,1,-1};//定义方向数组
int dy[4]={1,-1,0,1};
int a[105][105],d;
int main(){
	int n,num=1;
	int x=1,y=1;
	cin>>n;
	while(num<=pow(n,2)){
		a[x][y]=num;
		num++; 
		x+=dx[d];
		y+=dy[d];
		if(d==0){
			if(x==1)d=1;
			else d=3;
		}
		else if(d==1){
			if(y==1)d=2;
			if(x==n)d=0;
		}
		else if(d==2){
			if(y==1)d=3;
			else d=0;
		}
		else if(d==3){
			if(x==1)d=0;
			else if(y==n)d=2;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<a[i][j]<<'\t';
		}
		cout<<endl;
	}
	return 0;
}
/*
1       2       6       7
3       5       8       13
4       9       12      14
10      11      15      16
*/

方向数组是一种在编程中用于模拟路径、移动规则的二维数组结构,特别是在迷宫问题或游戏中的角色移动中常见。在这个例子中,dx[] 和 dy[] 分别存储了四个基本的方向(上、下、左、右),对于每一步移动,程序会通过索引 d 来选取相应的方向(x+dxd,y+dyd)。

在给定的问题中,比如输入 n=4,程序生成的是一个 "盘蛇矩阵" 或 "蛇形矩阵",每一行和列递增,但每次移动到边界时,按照特定的方向切换。d 变量用于跟踪当前方向,并根据边界条件调整,确保不会超出矩阵范围。

这段代码的主要流程包括:

  1. 输入矩阵大小 n
  2. 初始化变量如坐标 (x, y) 和计数器 num
  3. 循环打印矩阵,每次都更新坐标并根据方向数组修改方向
  4. 当达到指定大小 pow(n, 2) 时停止循环
  5. 最后遍历并输出矩阵
相关推荐
朝朝辞暮i4 分钟前
C++ 第 21 课:struct —— 把一组相关数据打包在一起
开发语言·c++·算法
青梅橘子皮11 分钟前
Blue---二分算法(二分查找与二分答案)
算法
长河22 分钟前
Java的GC(垃圾回收)中,标记无用对象的核心方法是可达性分析算法
java·jvm·算法
月光船幽幽41 分钟前
加性偏移外推提升参数识别可靠性
python·算法
SHARK_pssm1 小时前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
凯哥Java1 小时前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
汉克老师1 小时前
GESP2026年9月认证C++二级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
Ivanqhz1 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法
Ai-_Man1 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
Java后端的Ai之路1 小时前
Python进阶探索23 - Python中的Time与Datetime模块
开发语言·数据库·python·datetime·time