【每日面试题】矩阵的螺旋输出

来源:互联网 发布:淘宝卖家开花呗的条件 编辑:程序博客网 时间:2024/05/16 14:51

         输入一个m*n的矩阵,将其螺旋输出,如下图:

代码如下:
//矩阵螺旋输出#define max 100int data[max][max]={0};int Output(int m,int n,int &x,int &y,int cnt,int total){if(m==1&&n==1){        data[x][y]=cnt++;printf("%d\n",data[x][y]);return cnt;}for(int i=0;i<m;i++)data[x++][y]=cnt++;if(cnt>total)return cnt;x--;y++;for(int j=0;j<n-2;j++)data[x][y++]=cnt++;if(cnt>total)return cnt;for(int l=0;l<m;l++)data[x--][y]=cnt++;    if(cnt>total)return cnt;x++;y--;for(int s=0;s<n-2;s++)data[x][y--]=cnt++;return cnt;}int main(){int m=0,n=0;int cnt=1;scanf("%d%d",&m,&n);    if(m>100||n>100){printf("can't process\n");return -1;}if(m==0&&n==0)return -1;if(m==0){for(int i=0;i<n;i++)data[m][i]=cnt++;for(int j=0;j<n;j++)printf("%d\n",data[m][j]);return 0;}elseif(n==0){for(int j=0;j<m;j++)data[j][n]=cnt++;for(int j=0;j<m;j++)printf("%d\t",data[j][n]);printf("\n");    return 0;}else{int x=0;int y=0;int i=m;int j=n;      while(cnt<=m*n)     {     cnt=Output(i,j,x,y,cnt,m*n);i-=2;j-=2;x++;y++;       }   }for(int i=0;i<m;i++){for(int j=0;j<n;j++)printf("%d\t",data[i][j]);printf("\n");}return 0;}
以上是我理解的,希望有哪位大神能指点其他的高效算法!
原创粉丝点击