二维数组内容
1234
5678
9101112
13141516
输入结果:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
#include <bits/stdc++.h>
using namespace std;
void PrintMatrix(vector<vector<int> > matrix)
{
int rows = matrix.size();
int cols = matrix[0].size();
int n = rows*cols; //内容总数
bool _matrix[rows][cols];
memset(_matrix,1,sizeof(_matrix));
int dynamic_row = 0;
int dynamic_col = 0;
int count = 0;
while(count<n)
{
//右行
//cout<<"右行"<<endl;
for(int i=dynamic_col; i<cols; i++)
{
if(_matrix[dynamic_row][i])
{
dynamic_col = i;
_matrix[dynamic_row][i] = 0; //已被访问
cout<<matrix[dynamic_row][i]<<" ";
count++;
}
}
//cout<<endl;
//下行
//cout<<"下行"<<endl;
for(int i=dynamic_row; i<rows; i++)
{
//dynamic_row = i; //及时更新 访问行的状态
if(_matrix[i][dynamic_col])
{
dynamic_row = i;
_matrix[i][dynamic_col] = 0; //已被访问
cout<<matrix[i][dynamic_col]<<" ";
count++;
}
}
//cout<<endl;
//左转
//cout<<"左行"<<endl;
for(int i=dynamic_col; i>=0; i--)
{
//dynamic_col = i;
if(_matrix[dynamic_row][i])
{
dynamic_col = i;
_matrix[dynamic_row][i] = 0; //已被访问
cout<<matrix[dynamic_row][i]<<" ";
count++;
}
}
//cout<<endl;
//上行
//cout<<"上行"<<endl;
for(int i=dynamic_row; i>=0; i--)
{
//dynamic_row = i;
if(_matrix[i][dynamic_col])
{
dynamic_row = i;
_matrix[i][dynamic_col] = 0; //已被访问
cout<<matrix[i][dynamic_col]<<" ";
count++;
}
}
//cout<<endl;
}
/*
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
*/
}
int main()
{
//int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
//vector<int> matrix(a,a+16);
int start = 1;
vector <vector<int> > matrix(4);
for(int i=0; i<4; i++)
{
matrix[i].resize(4);
for(int j=0; j<4; j++)
{
matrix[i][j] = start++;
}
}
//{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
cout<<"----"<<endl;
//cout<<matrix.size()<<endl;
PrintMatrix(matrix);
/*
int col = 5;
int dynamic_ccc = 0;
for(int i=dynamic_ccc;i<col;i++){
dynamic_ccc = i;
cout<<i<<endl;
}
cout<<dynamic_ccc<<endl;
*/
/*
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[i].size();j++){
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
*/
//int n = matrix.size();
//cout<<n<<endl;
}
四种方向不断重复打印
右行 下行 左行 上行
同时不断修改行列值,循环进行打印