按照右移步数k,对矩阵进行分割,然后对矩阵两侧进行反转操作,最后对整个矩阵进行反转就得到右移后的矩阵
代码如下:
//按照右移步数,对矩阵进行分割,然后对矩阵两侧进行反转操作,最后对整个矩阵进行反转就得到右移后的矩阵
#include<iostream>
#include<vector>
using namespace std;
void RightReverse(vector<vector<int>> &a,int begin,int end)
{
int n=a.size();
for(int j=0;j<n;j++)
{
for (int i = 0; i < (end - begin + 1) / 2; i++) // 交换移动
{
int temp = a[j][begin + i];
a[j][begin + i] = a[j][end - i];
a[j][end - i] = temp;
}
}
}
void Converse(vector<vector<int>> &a, int n, int k)
{
//三次反转
RightReverse(a, 0, n-k-1);
RightReverse(a, n-k, n - 1);
RightReverse(a, 0, n - 1);
}
int main()
{
int n;
int k;//右移
cin>>k>>n;
k=k%n;
vector<vector<int>> a(n,vector<int>(n));
for (int i = 0; i < n; i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
Converse(a, n, k);
//输出
for (int i = 0; i < n; i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}