1つのタイトル説明
16プリントアウト1,234,567,891,011,121,314 15順番:次の4×4行列を入力した場合、例えば、各番号の順番を印刷する時計回りの順に外側から内側へ順に、行列を入力デジタル1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。
2つのアイデアや方法
直接定义一个矩形,在矩形的四条边取值,程序大大简化。
3芯コード
1 クラスソリューション{ 2 公共: 3 ベクトル< INT > printMatrix(ベクトル<ベクトル< 整数 >> 行列){ 4 ベクトル< INT > VEC。 5 int型の行= matrix.size()。 6 INTのカラム=行列[ 0 ] .size()。 7 INTの左= 0、右=カラム、最大= 0、下= 行。 8 一方((アップ<ボトム)&&(左< 右)) 9 { 10 用(int型私は=左; iは右<; iは++ )vec.push_backを(行列[最大] [I])。 11 のためには、(int型私は+ = 1 ; iは底を<; iは++)vec.push_back(行列[I] [右1 ])。 12 のために(int型 I =右1 - 1 ;((ボトム1(I> =左))=最大)&&; i--!)vec.push_back(行列[ボトム1 ] [I])。 13 のためには、(int型 I =ボトム1 - 1 ;((右1!)=左)&&(I>左); i-- )vec.push_back(行列[I] [左])。 14 アップ++; ++左; 右 - ; bottom-- ; 15 } 16 リターンVEC。 17 } 18 }。
4完全なコード
1つの#include <iostreamの> 2の#include <ベクトル> 。3 。4 使用して 名前空間STD; 5 。6 // 直接大幅にプログラムを簡素化、矩形の4辺の値を矩形を定義する 。7 クラスソリューション{ 8 公共: 9。 ベクトル< 整数 > printMatrix(ベクトル<ベクトル< INT >> 行列){ 10 ベクトル< INT > VEC; 11 int型の行= matrix.size(); 12は、 INTカラム=行列[ 0 ] .size(); 13である INT =左0、右=カラム、最大= 0、下= 行。 14 一方((アップ<ボトム)&&(<左)右) 15 { 16 のための(int型 iは左=;私は右<; Iは++ )vec.push_back(行列[最大] [I])。 17 のために(int型 iは+アップ= 1 ; iが底を<; I ++)はvec.push_back(行列[I] [右- 1 ])。 18 のために(int型 I =右- 1 - 1 ;((ボトム- 1)=最大)&&(I> =左);!i--)vec.push_back(行列[ボトム- 1 ] [I])。 19 用(int型 I =ボトム- 1 - 1 ;((右- 1)=左)&&(I>左);!i-- )vec.push_back(行列[I] [左])。 20 アップ++; ++左; 右 - ; bottom-- ; 21 } 22 リターンVEC。 23 } 24 }。 25 26 のint main()の 27 28 { 29 ソリューション。 30 ベクトル<ベクトル< INT >>行列= {{ 1、2、3、4、5 }、{ 6、7、8、9、10 }、{ 11、12、13、14、15 }}; // 行列の初期化 31である ベクトル< INT > M = a.printMatrix(マトリックス); 32 のための(自動I:M)// 順次戻り値行列印刷 33が COUT I << << " " ; 34は COUT << ENDL; 35 36 リターン 0 ; 37 [ 38です }
参考資料
https://blog.csdn.net/hangsyt108/article/details/80949337