題目:輸入一個矩陣,按照從外向裡以順時針的順序依次列印出每一個數字。
#include<iostream>
#include<vector>
using namespace std;
void ClockwisePrint(vector<vector<int>>matrix) {
//對于matrix[i][j]
//horizontal記錄j的列印範圍
//vertical記錄i的列印範圍
//direction記錄列印方向
int horizontal_min = 0, honrizontal_max = matrix[0].size();
int vertical_min = 0, vertical_max = matrix.size();
int direction = 0;
while ((honrizontal_max - horizontal_min) > 0 && (vertical_max - vertical_min) > 0) {
bool visit = false;
if (!visit && direction == 0) {//向右
for (int i = horizontal_min; i < honrizontal_max; i++) {
cout << matrix[vertical_min][i] << " ";
}
vertical_min++;
direction++;
visit = true;
}
else if (!visit && direction == 1) {//向下
for (int i = vertical_min; i < vertical_max; i++) {
cout << matrix[i][honrizontal_max - 1] << " ";
}
honrizontal_max--;
direction++;
visit = true;
}
else if (!visit && direction == 2) {//向左
for (int i = honrizontal_max - 1; i >= horizontal_min; i--) {
cout << matrix[vertical_max - 1][i] << " ";
}
vertical_max--;
direction++;
visit = true;
}
else if (!visit && direction == 3) {//向上
for (int i = vertical_max - 1; i >= vertical_min; i--) {
cout << matrix[i][horizontal_min] << " ";
}
horizontal_min++;
direction = 0;
visit = true;
}
}
}
int main() {
int length = 5;
int width = 1;
vector<int>test_array(length, 0);
vector<vector<int>>test(width, test_array);
int count = 1;
for (int i = 0; i < width; i++) {
for (int j = 0; j < length; j++) {
test[i][j] = count++;
}
}
ClockwisePrint(test);
return 0;
}