4
【输出样例】
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
毫无思路,求解答
c++二维数组
纯手工写的,如果满意,还请采纳
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int arr[100][100];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
arr[i][j] = 0;
}
int x = 0, y = n - 1;
int d = 0;
int dir[4][2] = { { 1, 0 }, { 0, -1 }, { -1, 0 }, { 0, 1 } };
for (int i = 1; i <= n * n; i++)
{
arr[x][y] = i;
if (x + dir[d][0] == -1 || x + dir[d][0] == n || y + dir[d][1] == -1 || y + dir[d][1] == n || arr[x + dir[d][0]][y + dir[d][1]] != 0)
d = (d + 1) % 4;
x += dir[d][0];
y += dir[d][1];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%d\t", arr[i][j]);
printf("\n");
}
return 0;
}
很多小伙伴对线索化后如何销毁产生很多疑惑,因为指针指向发生了改变,但是我们依然可以用后序遍历的方法进行销毁,我们都知道线索化后一些原本指向NULL确实发生了改变,但是原先标志域已经由0变成了1,所以我们可以增加一个判断,如果为1就不进入,从而进行后序遍历达到销毁功能。
这里我加了 cout函数,主要是删除一个就显示一下,从而查看是否完全删除,一般小伙伴写后运行时可以不加。
回答:
关于C++二维数组的声明、初始化和使用,可以参考以下内容:
int arr[2][3]; // 声明一个2×3的二维数组
初始化二维数组
全部元素初始化为0
int arr[2][3] = {{0}}; //所有元素都初始化为0
int arr[2][3] = {{0,0,0},{0,0,0}}; // 第一维长度为2,第二维长度为3,所有元素都初始化为0
int arr[2][3] = {{1,2,3},{4,5,6}}; // 第一维长度为2,第二维长度为3,手动初始化每个元素的值
int arr[2][3] = {{1,2,3}}; // 第一维长度为2,第二维长度为3,第一行为1、2、3,其他元素自动初始化为0
int arr[2][3] = {{1,2,3},{4,5,6}};
cout << arr[0][1] << endl; // 访问第一行(index为0),第二列(index为1)的元素,输出2
cout << arr[1][2] << endl; // 访问第二行(index为1),第三列(index为2)的元素,输出6
建议结合自己的具体情况加以使用。