138 顺时针打印矩阵

来源:互联网 发布:热血传奇mac客户端 编辑:程序博客网 时间:2024/05/16 06:06
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               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 。分析:包括 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 41 2 3 45 6 7 89 10 11 1213 14 15 162 31 4 85 7 94 31 4 5 2 7 83 9 44 6 9*/


0 0
原创粉丝点击