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