?? 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 + -