如何顺时针旋转矩阵?
这是一个示例:
1 2 3
4 5 6
7 8 9
旋转后:
4 1 2
7 5 3
8 9 6
4x4示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5 1 2 3 9 10 6 4 13 11 7 8 14 15 16 12 5x5是相似的
,我可以旋转90°,但在此练习中不是正确的 矩阵的一个元素仅移动一次 我已经尝试了2个小时以找到该算法,但是我的代码不起作用。 请帮助我解决这个问题
#include <iostream>
using namespace std;
void input(int **a,int row,int column)
{
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
cin>>a[i][j];
}
}
void output(int **a,int row,int column)
{
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
cout<<a[i][j]<< " ";
cout<<endl;
}
}
void rotate(int **a,int **b,int m,int n)
{
for(int i=0; i<n; i++)
{
int k=m-1;
for(int j=0; j<m; j++)
{
b[i][j]=a[k][i];
k--;
}
}
}
int main()
{
int m,n;
cin>>m>>n;
int **a=new int*[m];
for(int i=0; i<m; i++)
a[i]=new int[n];
int **b=new int*[n];
for(int i=0; i<n; i++)
b[i]=new int[m];
input(a,m,n);
rotate(a,b,m,n);
output(b,n,m);
return 0;
}
Here's an example:
1 2 3
4 5 6
7 8 9
After rotating:
4 1 2
7 5 3
8 9 6
4x4 example:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12
5x5 is similar
I can rotate 90° but that's not true in this exercise
A element of the matrix just move once
I have tried for 2 hours to find the algorithm but my code doesn't work.
Please help me solve this problem
#include <iostream>
using namespace std;
void input(int **a,int row,int column)
{
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
cin>>a[i][j];
}
}
void output(int **a,int row,int column)
{
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
cout<<a[i][j]<< " ";
cout<<endl;
}
}
void rotate(int **a,int **b,int m,int n)
{
for(int i=0; i<n; i++)
{
int k=m-1;
for(int j=0; j<m; j++)
{
b[i][j]=a[k][i];
k--;
}
}
}
int main()
{
int m,n;
cin>>m>>n;
int **a=new int*[m];
for(int i=0; i<m; i++)
a[i]=new int[n];
int **b=new int*[n];
for(int i=0; i<n; i++)
b[i]=new int[m];
input(a,m,n);
rotate(a,b,m,n);
output(b,n,m);
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
虽然我没有找到这种旋转的单一数学公式,但我使用四个小循环来完成它。
此外,我的程序支持任意大小的矩阵
NxM
,不仅是正方形,而且不仅是奇数大小。为了简单地运行以下代码片段而不是从 std::cin 读取矩阵,我将矩阵元素的值内联为代码中的常量。
另外,为了简单起见,我使用 std::vector 不执行任何普通矩阵的新操作/删除操作。如何将我的解决方案应用于普通数组的情况是非常明显的。
在线尝试!
输出:
Although I didn't find some single mathematical formula for this rotation, I did it using four tiny loops.
Also my program supports any arbitrary size of matrix
NxM
, not only square, and not only odd sizes.For simplicity of running following code snippet instead of reading matrix from
std::cin
, I inlined values of matrix elements as constant in code.Also for simplicity I used
std::vector
not to do anynew
/delete
operations of plain matrix. It is quite obvious how to adopt my solution to your case of plain array.Try it online!
Output: