10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2 5 4 3
#include int main() { int a,b,n,sum=1; int M[101][101]; scanf("%d",&n); for(a=0;a<=(n-1)/2;a++) { for(b=a;b<=n-a-1;b++) M[b][n-a-1]=sum++; //M[0][2] M[1][2] M[2][2] for(b=n-2-a;b>=a;b--) M[n-1-a][b]=sum++; //M[2][1] M[2][0] for(b=n-2-a;b>=a;b--) M[b][a]=sum++; //M[1][0] M[0][0] for(b=a+1;b<=n-2-a;b++) M[a][b]=sum++; //M[[0][1] } for(int i=0;i
***************************************** 相关 *********************************************
【剑指offer】顺时针打印矩阵:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
class
Solution {
public
:
vector<
int
> printMatrix(vector<vector<
int
> > matrix) {
int
row = matrix.size();
int
col = matrix[
0
].size();
vector<
int
> res;
if
(row ==
0
|| col ==
0
)
return
res;
// 输入的二维数组非法,返回空的数组
int
left =
0
, top =
0
, right = col -
1
, bottom = row -
1
;
// 定义四个关键变量,表示左上和右下的打印范围
while
(left <= right && top <= bottom)
{
for
(
int
i = left; i <= right; ++i) res.push_back(matrix[top][i]); // left to right
for
(
int
i = top +
1
; i <= bottom; ++i) res.push_back(matrix[i][right]);
// top to bottom
if
(top != bottom) // right to left
for
(
int
i = right -
1
; i >= left; --i) res.push_back(matrix[bottom][i]);
if
(left != right)
// bottom to top
for
(
int
i = bottom -
1
; i > top; --i) res.push_back(matrix[i][left]);
left++,top++,right--,bottom--;
}
return
res;
}
};
-
注意:1)for(int i=0;i<res.size(); i++)
cout<<res[i]; -
2)int M[101][101];
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
cin>>M[i][j]; -
3)vector<int> res;
int left=0, top=0, right= col-1, bottom = row-1;
while(left <= right && top <= bottom)
{
for(int i=left; i<=right; i++) res.push_back(M[top][i]);
for(int i=top+1; i<=bottom; i++) res.push_back(M[i][right]);
if(top!=bottom)
for(int i=right-1; i>=left; i--) res.push_back(M[bottom][i]);
if(left!=right)
for(int i=bottom-1; i>top; i--) res.push_back(M[i][left]);
left++, top++, right--, bottom--;
}