1-3-顺时针旋转矩阵

 1 /*
 2     题目描述:
 3         有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
 4         给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
 5         测试样例:
 6             [[1,2,3],[4,5,6],[7,8,9]],3
 7             返回:[[7,4,1],[8,5,2],[9,6,3]]
 8 */
 9 /*
10     将矩阵顺时针旋转90度
11     一圈一圈的进行旋转(交换)。
12     eg:
13         1 2 3
14         4 5 6
15         7 8 9
16     先旋转外圈:
17         首先交换1->3->9->7->1;
18         然后交换2->6->8->4->2;
19 */
20 #include <iostream>
21 #include <vector>
22 using namespace std;
23 
24 void rotateEdge(vector<vector<int> > &m, int tr, int tc, int dr, int dc){
25     int times = dc - tc;
26     int tmp = 0;
27     for (int i = 0; i < times; i++){
28         tmp = m[tr][tc+i];
29         m[tr][tc+i] = m[dr-i][tc];
30         m[dr-i][tc] = m[dr][dc-i];
31         m[dr][dc-i] = m[tr+i][dc];
32         m[tr+i][dc] = tmp;
33     }
34 }
35 vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
36     // write code here
37     int tR = 0;
38     int tC = 0;
39     int dR = n-1;
40     int dC = n-1;
41     while (tR < dR){
42         rotateEdge(mat, tR++, tC++, dR--, dC--);
43     }
44     return mat;
45 }
46 int main(){
47     vector<vector<int> > matrix;
48     vector<int> a;
49     a.push_back(1);
50     a.push_back(2);
51     a.push_back(3);/*
52     a.push_back(4);*/
53     matrix.push_back(a);
54 
55     vector<int> b;
56     b.push_back(4);
57     b.push_back(5);
58     b.push_back(6);/*
59     b.push_back(8);*/
60     matrix.push_back(b);
61 
62     vector<int> c;
63     c.push_back(7);
64     c.push_back(8);
65     c.push_back(9);/*
66     c.push_back(12);*/
67     matrix.push_back(c);
68 
69     vector<vector<int> > rt;
70     rt = rotateMatrix(matrix,3);
71     for (int i = 0; i < 3; i++){
72         for (int j = 0; j < 3; j++)
73             cout << rt[i][j] << ",";
74         cout << endl;
75     }
76     return 0;
77 }

 

posted @ 2015-10-16 11:09  KindaCrazy  阅读(484)  评论(0编辑  收藏  举报