代码如下:
/* 蛇形(回形)矩阵的实现: 解题思路: 整体思路:每一圈的数值都是连续的,所以我们一圈一圈的赋值 对一圈的初始化: 1:设置(p,p)每一圈最左上角的坐标 (q,q)每一圈最右下角的坐标 2:对每一圈分四部(上,右,下,左)分别初始化 为了使这四步对称(赋值个数相同),按下图这样初始化 1的位置初始化--->上 2的位置初始化--->右 3的位置初始化--->下 4的位置初始化--->左 1 1 1 2 4 2 4 2 4 3 3 3 */ #include<stdio.h> #include<stdlib.h> //system #define LENTH 100 //数组默认维数 void snack_matrix(int n) { int array[LENTH][LENTH] = {0}; int p = 0; //每一圈(正方形)最左上角坐标(p,p) int q = n-1;//每一圈(正方形)最右下角坐标(q,q) int num = 1;//数组中存放的值,存放一个后+1 int i; while(p < q) { /*初始化----->上*/ for(i=p;i<q;++i) { array[p][i] = num;//行坐标不变,列坐标:p--->q-1 num++; } /*初始化----->右*/ for(i=p;i<q;++i) { array[i][q] = num;//列坐标不变,列坐标:p--->q-1 num++; } /*初始化----->下*/ for(i=q;i>p;--i) { array[q][i] = num;//行坐标不变,列坐标:q--->p+1 num++; } /*初始化----->左*/ for(i=q;i>p;--i) { array[i][p] = num;//列坐标不变,行坐标:q--->p+1 num++; } p++;//为下一个圈做准备 q--; } if(n%2 != 0) //维数是奇数,最中间一个得单独赋值(此时p=q)不进入while循环赋值 { array[n/2][n/2] = num; } for(i=0;i<n;++i) { for(int j=0;j<n;++j) { printf("%d\t",array[i][j]); } printf("\n");//输满一行后换行 printf("\n"); } } int main() { system("mode con cols=100 lines=100"); system("color 0A"); int n; printf("please input the size of matrix:\n"); scanf("%d",&n); snack_matrix(n); return 0; }
原文:http://blog.csdn.net/zongyinhu/article/details/45310923