顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
#include<stdio.h>
#include<string.h>
const int MAX = 100;
int main()
{
// freopen("in.txt","r",stdin);
int row, col, a[MAX][MAX];
while(scanf("%d %d", &row, &col) != EOF)//输入矩阵的行,列
{
int num = 1, i, j, x = 0, y = 0;
// memset(a, 0, sizeof(a));
for(i=0; i<row; ++i)
{
for(j=0; j<col; ++j)
{
a[i][j] = num++;
}
}
for(i=0; i<row; ++i)
{
for(j=0; j<col; ++j)
{
printf("%03d ", a[i][j]);
}
printf("/n");
}
num = 0;
while(num < row * col)
{
while(a[x][y])//往右边走
{
num++;
if(num > row * col)//防止一维的数组越界
break;
printf("%d ", a[x][y]);
a[x][y] = 0;
y++;
if( col == y)//出界的话先退回一个位置,再往下移一个位置
{
y = col - 1;
x += 1;
break;
}
if( 0 == a[x][y] )//已经输出的
{
--y;
x += 1;
break;
}
}
while(a[x][y])//往下走
{
num++;
if(num > row * col)
break;
printf("%d ", a[x][y]);
a[x][y] = 0;
x++;
if( row == x)
{
x = row - 1;
y -= 1;
break;
}
if( 0 == a[x][y] )
{
x -= 1;
y -= 1;
break;
}
}
while(a[x][y])//往左边走
{
num++;
if(num > row * col)
break;
printf("%d ", a[x][y]);
a[x][y] = 0;
--y;
if( -1 == y )
{
y += 1;
x -= 1;
break;
}
if( 0 == a[x][y] )
{
x -= 1;
y += 1;
break;
}
}
while(a[x][y])//往上走
{
num++;
if(num > row * col)
break;
printf("%d ", a[x][y]);
a[x][y] = 0;
--x;
if( 0 == a[x][y] )
{
x += 1;
y += 1;
break;
}
}
}
printf("/n");
}
return 0;
}