问题
整数
x
,
y
,
r
,
f
x,y,r,f
x,y,r,f表示以第
x
x
x行第
y
y
y列为中心的
2
r
+
1
2r+1
2r+1阶矩阵按照某种时针方向旋转,其中
f
=
0
f=0
f=0表示顺时针,
f
=
1
f=1
f=1表示逆时针。
例如下面3×3矩阵
1 | 2 | 3 |
---|---|---|
4 | 5 | 6 |
7 | 8 | 9 |
顺时针旋转为
7 | 4 | 1 |
---|---|---|
8 | 5 | 2 |
9 | 6 | 3 |
逆时针旋转为
3 | 6 | 9 |
---|---|---|
2 | 5 | 8 |
1 | 4 | 7 |
可以发现一个简单规律:把行列按照一定方式置换就行了
代码
void rotate(int x,int y,int r,int f)
{
for(int i=x-r;i<=r+x;i++)
for( int j=y-r;j<=r+y;j++)
b[i][j]=a[i][j];
if(f==0)
{
for(int i=x-r;i<=r+x;i++)
for( int j=y-r;j<=r+y;j++)
a[x-y+j][x+y-i]=b[i][j]; //从右上角开始放
}
else
{
for(int i=x-r;i<=r+x;i++)
for( int j=y-r;j<=r+y;j++)
{
a[x+y-j][y-x+i]=b[i][j]; //从左下角开始放
}
}
}