思想
使用四个指针LR,LC,RR,RC
(LR,LC)表示左上角位置坐标
(RR,RC)表示右下角位置坐标
将整个螺旋打印过程由外向内逐层打印
打印函数output()
void output(int **arr, int LR, int LC, int RR, int RC){
if(LR == RR){
for(int i = LC; i <= RC; i++){
cout << arr[LR][i] << " ";
}
cout << endl;
}else if(LC == RC){
for(int i = LR; i <= RR; i++){
cout << arr[i][LC] << " ";
}
cout << endl;
}else{
int curR = LR;
int curC = LC;
while(curC < RC){
cout << arr[curR][curC++] << " ";
}
while(curR < RR){
cout << arr[curR++][curC] << " ";
}
while(curC > LC){
cout << arr[curR][curC--] << " ";
}
while(curR > LR){
cout << arr[curR--][curC] << " ";
}
}
}
相关阅读
旋转正方形矩阵
螺旋打印矩阵
Z字打印矩阵
行列排序矩阵找数
完整代码
#include <bits/stdc++.h>
using namespace std;
int **inputArr(int n, int m){
int **arr;
arr = new int* [n];
for(int i = 0; i < n; i++){
arr[i] = new int [m];
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> arr[i][j];
}
}
return arr;
}
void outputArr(int **arr, int n, int m){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << arr[i][j] << " ";
}
cout << endl;
}
}
void output(int **arr, int LR, int LC, int RR, int RC){
if(LR == RR){
for(int i = LC; i <= RC; i++){
cout << arr[LR][i] << " ";
}
cout << endl;
}else if(LC == RC){
for(int i = LR; i <= RR; i++){
cout << arr[i][LC] << " ";
}
cout << endl;
}else{
int curR = LR;
int curC = LC;
while(curC < RC){
cout << arr[curR][curC++] << " ";
}
while(curR < RR){
cout << arr[curR++][curC] << " ";
}
while(curC > LC){
cout << arr[curR][curC--] << " ";
}
while(curR > LR){
cout << arr[curR--][curC] << " ";
}
}
}
int main(){
int **arr;
int n, m;
cin >> n >> m;
int LR = 0, LC = 0;
int RR = n-1, RC = m-1;
arr = inputArr(n, m);
while(LR <= RR && LC <= RC){
output(arr,LR++,LC++,RR--,RC--);
}
}