我的螺旋矩阵实现

来源:互联网 发布:信息系统与软件联系 编辑:程序博客网 时间:2024/06/08 06:06
#include <stdio.h>#define N 5                 //矩阵长宽#define DEBUGint main(){int array[N][N];int x=0,y=0;int maxx=N-1,maxy=N-1,minx=0,miny=0;int number=1;            int now=1;         //方向   1.down 2.right 3.up 4.leftint flag=1;         //判断顺时针还是逆时针int f=0;         //判断是否移动过printf("1.顺时针 2.逆时针\n");scanf("%d",&flag);if (flag==1)now=2;else if (flag==2)now=1;while(maxx!=minx && maxy!=miny  && maxx>=0 && minx >=0 && maxy >=0 && miny >= 0) {while(x<maxx && now==1) {//downarray[x++][y]=number;number++;f=1;}if (flag==1 && f==1) {now=4;maxy--;                         //顺时针向下移动后,能到达的最大行减小一f=0;} else if (flag==2) {now=2;                          //逆时针向下移动后,能到达的最小行加一miny++;}while(y<maxy && now==2) {//rightarray[x][y++]=number;number++;f=1;}if (flag==1 && f==1) {now=1;minx++;f=0;}else if (flag==2) {now=3;maxx--;}while(x>minx && now==3) {//uparray[x--][y]=number;number++;f=1;}if (flag==1 && f==1) {now=2;miny++;f=0;}else if (flag==2) {now=4;    maxy--;}while(y>miny && now==4) {//leftarray[x][y--]=number;number++;f=1;}if (flag==1 && f==1) {now=3;maxx--;f=0;}else if (flag==2) {now=1;minx++;}}array[x][y]=number++;if (flag==1)array[minx][miny]=number++;array[maxx][maxy]=number++;#ifdef DEBUGint i,j;for (i=0;i<N;i++) {for (j=0;j<N;j++) {printf("%d   ",array[i][j]);}printf("\n");}#endifreturn 0;}


 

原创粉丝点击