输入一个m*n的矩阵,将其螺旋输出,如下图:
代码如下:
//矩阵螺旋输出
#define max 100
int 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;
}
else
if(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;
}
以上是我理解的,希望有哪位大神能指点其他的高效算法!