時計回りの印刷行列
クラス解決{ パブリック: ベクトル < INT > printMatrix(ベクトル<ベクトル< 整数 >> 行列){ ベクトル < INT > 結果。 INT、M = matrix.size()。 もし(M == 0)リターン結果。 INT、N =行列[ 0 ] .size()。 もし(N == 0)リターン結果。 INT =開始0 ; しながら(開始<M / 2.0&& <N-開始/ 2.0 ){ printCircle(マトリックス、スタート、M、N - 、結果); スタート ++ ; } 戻り、その結果 } // 最初の判定、サークルプリントに分け、 //は(開始および終了の変化を決定座標、追加の開始と終了の座標と同じ)を参照してください // 最初のものを除いて4順次、残りは条件付きであり、ポストを実行するためには、以前のすべての条件を満たしている必要があります。 プライベート: 無効 printCircle(ベクトル<ベクトル< int型 >>マトリックス、int型、スタートをint型メートル、int型のn、ベクトル< INT >&結果){ int型 end_x = N - 1。 - 起動します。 INT end_y = M - 1 - 始めます。 // 从左到右 ため(int型 I =開始; I <= end_x; iが++ ) result.push_back(行列[開始] [I])。 // 从上到下 場合(end_y> 開始){ ため(int型 I = +開始1 ; I <= end_y; iが++ ) result.push_back(行列[i]が[end_x])。 } // 从右到左 場合(end_x - 1 > =開始&& end_y> 開始){ ため(INT I = end_x- 1; I> =スタート。i-- ) result.push_back(行列[end_y] [I])。 } // 从下到上 場合(end_y - 1 >開始&& end_x - 1 > = 開始){ ため(int型 I = end_y - 1 ; I> = +開始1 ; i-- ) result.push_backを(行列[I] [開始]); } } }。
ます。https://www.cnblogs.com/cookcoder-mr/p/11123310.htmlで再現