您的位置:首页 > 编程语言 > C语言/C++

C++算法,将一个图像逆时 针旋转 90 度

2016-09-07 21:54 267 查看
问题描述

旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时

针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。

输入格式

输入的第一行包含两个整数 n, m,分别表示图像矩阵的行数和列数。 接下来 n 行每行包含 m 个整数,表示输入的图像。

输出格式

输出 m 行,每行包含 n 个整数,表示原始矩阵逆时针旋转 90 度后的矩 阵。

样例输入 2 3 1 5 3 3 2 4

评测用例规模与约定

1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过 1000 的非负整数

#include<iostream>
using namespace std;
int main(){
int n, m;
//n代表行数,m代表列数
//  cout << "Please input the N:";
cin >> n;
if(n<1){
cout<<"输入不符合要求,请重新输入"<<endl;
cin>>n;
}
//cout << "Please input the M:";
cin >> m;
if(m>1000){
cout<<"输入不符合要求,请重新输入"<<endl;
cin>>m;
}
int **iArr1 =NULL;
//动态开辟二维数组,重点
iArr1 = new int*
;
for (int i = 0; i < n; i++)
{
iArr1[i] = new int[m];
}
//cout << endl;
int **iArr2 = NULL;
iArr2 = new int*[m];
for (int i = 0; i < m; i++)
{
iArr2[i] = new int
;
}
//给二维数组iArr1赋值
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin>>iArr1[i][j];
}
}
//int temp = 0;
//转换位置
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
iArr2[j][i] = iArr1[i][j];
}
}
//int temp = 0;
for (int i = 0; i < m/2; i++){
for (int j = 0; j < n; j++){
/*
放弃使用中间量,采用本身的代替算法
a=a+b;
b=a-b;
a=a-b;
*/
iArr2[i][j] = iArr2[i][j]+iArr2[m-1-i][j];
iArr2[m - 1 - i][j] = iArr2[i][j] - iArr2[m - 1 - i][j];
iArr2[i][j] = iArr2[i][j]-iArr2[m - 1 - i][j];
}
}
//输出结果
//cout << "The Array iArr1 is:" << endl;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cout << iArr1[i][j]<<" ";
}
cout << endl;
}

//cout << "The Array iArr2 is:"<<endl;
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
cout << iArr2[i][j] << " ";
}
cout << endl;
}
//销毁开辟的空间,用delete,重点
for (int i = 0; i < n; i++)
{
delete[] iArr1[i];
iArr1[i] = NULL;
}
delete[]iArr1;
iArr1 = NULL;
for (int i = 0; i < m; i++)
{
delete[] iArr2[i];
iArr2[i] = NULL;
}
delete[]iArr2;
iArr2 = NULL;
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐