大家好,我又来了,首先,庆祝一下本博主破二百粉了,开森!(*^▽^*),这几个月来感谢大家的支持,那么,正文开始!
我们上次讲了二维数组的声明以及初始化,那么今天,我带你们认识一个概念:方向数组。
方向数组常应用于搜索算法中,在c/c++中可以用二维数组来表示方向。例如二维数组a[k][n]含义就是方向数组里面储存了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+dx[d],y+dy[d])。
在给定的问题中,比如输入 n=4
,程序生成的是一个 "盘蛇矩阵" 或 "蛇形矩阵",每一行和列递增,但每次移动到边界时,按照特定的方向切换。d
变量用于跟踪当前方向,并根据边界条件调整,确保不会超出矩阵范围。
这段代码的主要流程包括:
- 输入矩阵大小
n
- 初始化变量如坐标
(x, y)
和计数器num
- 循环打印矩阵,每次都更新坐标并根据方向数组修改方向
- 当达到指定大小
pow(n, 2)
时停止循环 - 最后遍历并输出矩阵