博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
螺旋阵(递归和非递归)
阅读量:6430 次
发布时间:2019-06-23

本文共 4703 字,大约阅读时间需要 15 分钟。

1 #include 
2 #include
3 #include
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 
2 #include
3 #include
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 }

 

转载地址:http://wotga.baihongyu.com/

你可能感兴趣的文章
if a point is inside a square with mathematics
查看>>
Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
查看>>
skyline无插件web的数据加载解析
查看>>
python基础学习第一天
查看>>
硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
查看>>
编译安装PHP
查看>>
css position:static 的使用
查看>>
nfs永久挂载与临时挂载
查看>>
linux查看网络链接状况命令之-netstat
查看>>
我的友情链接
查看>>
UIView的layoutSubviews和drawRect方法何时调用
查看>>
mysql主从同步
查看>>
制作最简化的Linux系统
查看>>
我的友情链接
查看>>
使用List的remove方法需要的注意的问题
查看>>
Ansible的介绍、安装、配置及常用模块介绍
查看>>
编码列表
查看>>
eigrp 配置
查看>>
谈一谈 redis 集群
查看>>
concurrent包
查看>>