题目描述

给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素

输入描述:

输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。

输出描述:

请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,
3,”),每个矩阵输出完成后记得换行
示例1

输入

3 3
1 2 3
4 5 6
7 8 9
-1 -1

输出

1,2,3,6,9,8,7,4,5

备注:

M,N为正整数且 M*N<=300000

太好了,一道签到题给我整自闭了。

1.大数组开在外面。

2.连等a==b==c是先算出a==b为true再与c比较。

#include<iostream>
using namespace std;
int mutex[300005];
int isread[300005];
int main(){
    int m,n;
    while(1){
        cin >> m >> n;
        if( m == n && m == -1 )break;
        for( int i = 0 ; i < m ; i ++ ){
            for( int j = 0 ; j < n ; j ++ ){
                cin >> mutex[i*n+j];
                isread[i*n+j] = 0;
            }
        }
        int row = 0,col = 0;
        int count = 1;
        printf("%d",mutex[0]);
        isread[0] = 1;
        while(count != m*n){
            while( col < n-1 && !isread[row*n+(col+1)] ){
                printf(",%d",mutex[row*n+(++col)]);
                isread[row*n+col] = 1;
                count++;
            }
            while( row < m-1 && !isread[(row+1)*n+col] ){
                printf(",%d",mutex[(++row)*n+col]);
                isread[row*n+col] = 1;
                count++;
            }
            while( col > 0 && !isread[row*n+(col-1)] ){
                printf(",%d",mutex[row*n+(--col)]);
                isread[row*n+col] = 1;
                count++;  
            }
            while( row > 0 && !isread[(row-1)*n+col] ){
                printf(",%d",mutex[(--row)*n+col]);
                isread[row*n+col] = 1;
                count++;  
            }
        }
        printf("\n");
    }
    return 0;
}

 


0 条评论

发表评论

Avatar placeholder