📄 luoxuan_shiyan.cpp
字号:
# include <stdio.h>
# include <stdlib.h>
/* 以下为方向设定 */
# define DIR_RIGHT 0
# define DIR_DOWN 1
# define DIR_LEFT 2
# define DIR_UP 3
# define DIR_MODE 4
/* 参数说明
* N , 螺旋方阵的最大阶数
* n , 映射子矩阵的阶数
* n_s , 递归遍历螺旋矩阵时,当前计数的值
* arr , 映射矩阵
* row_s , 本次遍历 , 映射矩阵的开始行
* col_s , 本次遍历 , 映射矩阵的开始列
* 无返回值 , 递归遍历
*/
void SortArr( int N , int n , int n_s , int ** arr , int row_s , int col_s );
void PrintArr( int n , int ** arr );
int main( int argc , char * argv[] )
{
int N ; /* 螺旋方阵的阶数*/
int ** arr ; /* 映射矩阵 */
printf("Input(N必须大于0) N=");
scanf("%d",&N);
/* 为映射矩阵的存储分配空间 */
arr = (int **)malloc(N*sizeof(int *));
for( int i = 0 ; i < N ; i++ )
{
arr[i] = (int *)malloc(N*sizeof(int));
}
/* 为映射矩阵的存储分配空间 */
for( int i = 0 ; i < N ; i++ )
for( int j = 0 ; j < N ; j++ )
arr[i][j] = 0 ;
/* 递归遍历螺旋方阵填充映射矩阵 */
SortArr( N , N , 1 , arr , 0 , 0 );
/* 打印映射矩阵 */
PrintArr( N , arr );
system("pause");
return 0 ;
}
void SortArr( int N , int n , int n_s , int ** arr , int row_s , int col_s ) // 围绕递归解法 , 从 0 , 0 开始
{
if( n_s > N*N ) return ;
int row = row_s ;
int col = col_s ;
int c = n_s ;
col = col - 1 ;
for( int i = 0 ; i < n ; i++ ) // 从子矩阵的第1行开始向右遍历
{
col = col + 1 ;
arr[row][col] = c ;
if( c >= N*N ) return ; // 当前值大于螺旋矩阵的最大值,则跳出
c = c + 1 ;
}
for( int i = 0 ; i < n-1 ; i++ ) // 从子矩阵的最右列第2行开始向下遍历
{
row = row + 1 ;
arr[row][col] = c ;
if( c >= N*N ) return ;
c = c + 1 ;
}
for( int i = 0 ; i < n-1 ; i++ ) // 从子矩阵的最后一行的右侧开始向左遍历
{
col = col - 1 ;
arr[row][col] = c ;
if( c >= N*N ) return ;
c = c + 1 ;
}
for( int i = 0 ; i < n-2 ; i++ ) // 从子矩阵的最左列从下向上遍历
{
row = row - 1 ;
arr[row][col] = c ;
if( c >= N*N ) return ;
c = c + 1 ;
}
PrintArr( N , arr ); /* 追踪映射数组的填充情况 */
SortArr( N , n - 2 , c , arr , row , col + 1 );
}
void PrintArr( int n , int ** arr ) // 打印矩阵函数
{
printf("****************************************\n");
for( int i = 0 ; i < n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
{
printf(" %d" , arr[i][j] );
}
printf("\n");
}
printf("****************************************\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -