螺旋方阵
来源:互联网 发布:伪装地理位置软件 编辑:程序博客网 时间:2024/04/30 02:21
今天帮同学做C语言课程设计,遇到一个好点的题目,拿出来分享。
下面是一个5 * 5阶的螺旋方阵,编程找印出此形式的n * n阶方阵(顺时针旋进).
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
我用的是递归算法,设置四个变量:左边界left,右边界right,上边界up,下边界down。每调用一次递归在二维数组中存一层(圈)数据,然后把left加1,right减1,up加1,down减1。left > right为递归出口。
实现代码如下:
#include <stdio.h>
int array[100][100];
void square_matrix(int left, int right, int up, int down, int v, int n)
{
int x, y, i, j, k, m;
if (left <= right) {
for (i = left; i <= right; i ++) array[up][i] = v ++;
for (k = up + 1;k < down; k ++) array[k][right] = v ++;
for (j = right; j > left; j --) array[down][j] = v ++;
for (m = down; m > up; m--) array[m][left] = v ++;
square_matrix(left + 1, right - 1, up + 1, down - 1, v, n);
} else
for (x = 0; x < n; x ++) {
for (y = 0; y < n; y ++)
printf("%4d", array[x][y]);
printf("/n");
}
}
int main(int argc, char* argv[])
{
int n;
scanf("%d", &n);
square_matrix(0, n - 1, 0, n - 1, 1, n);
return 0;
}
补充(非递归算法):
#include <stdio.h>
int main(int argc, char* argv[])
{
int a, b, c, d, i, n, num = 1, array[20][20];
scanf("%d", &n);
/* a, b, c, d分别为上、下、左、右边界,a、b为行号,c、d为列号 */
for (a = 0, b = n - 1, c = 0, d = n - 1; a <= b; a ++, b --, c ++, d --) {
for (i = c; i <= d; i ++) array[a][i] = num ++;
for (i = a + 1; i < b; i ++) array[i][d] = num ++;
for (i = d; i > c; i --) array[b][i] = num ++;
for (i = b; i > a; i --) array[i][c] = num ++;
}
for (i = 0; i < n; i ++) {
for (a = 0; a < n; a ++) printf("%5d", array[i][a]);
printf("/n");
}
return 0;
}
======== 转载自 http://blog.chinaunix.net/u/22520/showart_159552.html ========
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- 螺旋方阵
- memcached全面剖析–3.memcached的删除机制和发展方向
- JAVA实现AES加密
- Shell脚本学习一
- 俞敏洪谈奋斗
- USB应用程序开发
- 螺旋方阵
- memcached全面剖析4. memcached的分布式算法
- 从一名学生角度来看google退出
- SQL Server Management Studio或2000的查询分析器中一个非常好用的功能
- 一类螺旋方阵问题的算法分析与实现
- 手机软件系统测试
- 正则表达式中的注释
- do you want a piece of me
- memcached全面剖析–5. memcached的应用和兼容程序