38、顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
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 。
分析:包括 Autodesk、EMC 在内的多家公司在面试或者笔试里采用过这道题。
/* 38、顺时针打印矩阵 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 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 。 分析:包括 Autodesk、EMC 在内的多家公司在面试或者笔试里采用过这道题。 模拟一下即可 */ #include<iostream> #include<stdio.h> #define N 100 using namespace std; int map[N][N],vis[N][N]; int main() { int n,m,i,j,tot; while(scanf("%d%d",&n,&m),n+m) { for(i=0;i<n;i++)//输入一个矩阵 for(j=0;j<m;j++) scanf("%d",&map[i][j]); memset(vis,0,sizeof(vis)); tot=1;i=0;j=0; while(tot<=n*m) { while(j<m&&!vis[i][j]) { printf("%d ",map[i][j]); vis[i][j]=1;tot++; j++; } j--;i++; while(i<n&&!vis[i][j]) { printf("%d ",map[i][j]); vis[i][j]=1;tot++; i++; } i--;j--; while(j>=0&&!vis[i][j]) { printf("%d ",map[i][j]); vis[i][j]=1;tot++; j--; } j++;i--; while(i>=0&&!vis[i][j]) { printf("%d ",map[i][j]); vis[i][j]=1;tot++; i--; } j++;i++; } printf("\n"); } return 0; } /* 4 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 3 1 4 8 5 7 9 4 3 1 4 5 2 7 8 3 9 4 4 6 9 */