题目描述
给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素
输入描述:
输入第一行是两个数字,分别代表行数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 条评论