您的位置:首页 > 其它

顺时针打印矩阵

2013-09-16 17:09 197 查看
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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.

输入:
输入可能包含多个测试样例,对于每个测试案例,

输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。

接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。

输出:
对应每个测试案例,输出一行,

按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。

样例输入:
4 41 2 3 45 6 7 89 10 11 1213 14 15 16


样例输出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10


答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-8114-1-1.html
#include<stdio.h>
#define MAX 1002
int a[MAX][MAX] , vi[MAX][MAX];
int main(void)
{
int n , m ;
while(scanf("%d %d",&n , &m )!=EOF){
int  i , j ;
for( i = 0 ; i < n ; i++ )
for( j = 0 ; j < m ; j++){
vi[i][j] = 0 ;
scanf("%d",&a[i][j]);
}
int col1 = 0 , row1 = 0 , col2= n-1 , row2 = m-1 ;
int min1 = m > n ?n :m ;
min1 = (min1+1) / 2 ;
while(min1--){
for( i = row1 ; i <= row2 && !vi[col1][i]; i ++ ){
printf("%d ",a[col1][i]);
vi[col1][i] = 1;
}
for( i = col1 + 1 ; i <= col2 && !vi[i][row2] ; i ++){
printf("%d ",a[i][row2]);
vi[i][row2] = 1 ;
}
for( i = row2-1 ; i >=row1 && !vi[col2][i]; i -- ){
printf("%d ",a[col2][i]);
vi[col2][i] = 1;
}
for( i = col2-1 ; i>= col1 + 1 && !vi[i][row1] ; i --){
printf("%d ",a[i][row1]);
vi[i][row1] = 1;
}
col1 ++ ;
row1 ++ ;
col2 -- ;
row2-- ;
}
printf("\n");
}
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: