螺旋阵(递归和非递归)
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 5 int **matrix; 6 int value = 1; 7 8 void recursion (int row, int col, int len) // row, col代表本次左上角元素的位置, len为本次矩阵边长 9 { 10 if (len <= 0) 11 { 12 return; 13 } 14 15 int i = row, j = col; 16 while (j < col + len) 17 { 18 matrix[i][j++] = value++; 19 } 20 21 j--; 22 i++; 23 24 while (i < row + len) 25 { 26 matrix[i++][j] = value++; 27 } 28 29 i--; 30 j--; 31 32 while (j >= col) 33 { 34 matrix[i][j--] = value++; 35 } 36 37 j++; 38 i--; 39 40 while (i > row) 41 { 42 matrix[i--][j] = value++; 43 } 44 45 i++; 46 j++; 47 48 recursion(i, j, len - 2); 49 } 50 51 void no_recursion ( int n ) // n为整个矩阵的边长 52 { 53 int i, j, len, col, row; 54 for (i = 0, j = 0, len = n; len > 0; ) 55 { 56 row = i; 57 col = j; 58 59 while (j < col + len) 60 { 61 matrix[i][j++] = value++; 62 } 63 64 j--; 65 i++; 66 67 while (i < row + len) 68 { 69 matrix[i++][j] = value++; 70 } 71 72 i--; 73 j--; 74 75 while (j >= col) 76 { 77 matrix[i][j--] = value++; 78 } 79 80 j++; 81 i--; 82 83 while (i > row) 84 { 85 matrix[i--][j] = value++; 86 } 87 88 i++; 89 j++; 90 91 len = len - 2; 92 } 93 } 94 95 int main() 96 { 97 int N = 7, i, j; 98 matrix = (int**) malloc(sizeof(int*) * N); 99 100 for (i = 0; i < N; i++) 101 { 102 matrix[i] = (int*) malloc(sizeof(int) * N); 103 memset(matrix[i], 0, sizeof(int) * N); 104 } 105 106 no_recursion(N); 107 108 for (i = 0; i < N; i++) 109 { 110 for (j = 0; j < N; j++) 111 { 112 std::cout << matrix[i][j] << ' '; 113 } 114 std::cout << std::endl; 115 } 116 117 for (i = 0; i < N; i++) 118 { 119 free(matrix[i]); 120 } 121 122 free(matrix); 123 124 return 0; 125 }
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 5 int **matrix; 6 int value = 1; 7 8 void recursion (int row, int col, int len) // row, col代表本次左上角元素的位置, len为本次矩阵边长 9 { 10 if (len <= 0) 11 { 12 return; 13 } 14 15 int i = row, j = col; 16 while (j < col + len) 17 { 18 matrix[i][j++] = value++; 19 } 20 21 j--; 22 i++; 23 24 while (i < row + len) 25 { 26 matrix[i++][j] = value++; 27 } 28 29 i--; 30 j--; 31 32 while (j >= col) 33 { 34 matrix[i][j--] = value++; 35 } 36 37 j++; 38 i--; 39 40 while (i > row) 41 { 42 matrix[i--][j] = value++; 43 } 44 45 i++; 46 j++; 47 48 recursion(i, j, len - 2); 49 } 50 51 void no_recursion ( int n ) // n为整个矩阵的边长 52 { 53 int i, j, len, col, row; 54 for (i = 0, j = 0, len = n; len > 0; ) 55 { 56 row = i; 57 col = j; 58 59 while (j < col + len) 60 { 61 matrix[i][j++] = value++; 62 } 63 64 j--; 65 i++; 66 67 while (i < row + len) 68 { 69 matrix[i++][j] = value++; 70 } 71 72 i--; 73 j--; 74 75 while (j >= col) 76 { 77 matrix[i][j--] = value++; 78 } 79 80 j++; 81 i--; 82 83 while (i > row) 84 { 85 matrix[i--][j] = value++; 86 } 87 88 i++; 89 j++; 90 91 len = len - 2; 92 } 93 } 94 95 int main() 96 { 97 int N = 7, i, j; 98 matrix = (int**) malloc(sizeof(int*) * N); 99 100 for (i = 0; i < N; i++) 101 { 102 matrix[i] = (int*) malloc(sizeof(int) * N); 103 memset(matrix[i], 0, sizeof(int) * N); 104 } 105 106 no_recursion(N); 107 108 for (i = 0; i < N; i++) 109 { 110 for (j = 0; j < N; j++) 111 { 112 std::cout << matrix[i][j] << ' '; 113 } 114 std::cout << std::endl; 115 } 116 117 for (i = 0; i < N; i++) 118 { 119 free(matrix[i]); 120 } 121 122 free(matrix); 123 124 return 0; 125 }
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.