i******e 发帖数: 273 | 1 关于第一章的N*N矩阵向右旋转90度的题。 怎么也得不到想要的结果,我按照答案修改
了我的程序,可是还是不对。
我得到的结果是:
Original matrix:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
After rotation:
99 81 72 63 54 45 36 27 18 0
91 88 72 63 54 45 36 27 11 1
92 82 77 63 54 45 36 22 12 2
93 83 73 66 54 45 33 23 13 3
94 84 74 64 55 44 34 24 14 4
95 85 75 65 45 44 35 25 15 5
96 86 76 36 56 46 33 26 16 6
97 87 27 67 57 47 37 22 17 7
98 18 78 68 58 48 38 28 11 8
9 89 79 69 59 49 39 29 19 0
我的实现:
void rotateMatrix(int **matrix, int size)
{
int temp;
for (int i = 0; i < size / 2; ++i) {
for (int j = i; j < size - i; ++j) {
// save the top line elements
temp = matrix[i][j];
// move the leftmost column elements to the top line
matrix[i][j] = matrix[size - j - 1][i];
// move the bottom line elements to the leftmost column
matrix[size - j - 1][i] = matrix[size - i - 1][size - j - 1];
// move the rightmost column elements to the bottom line
- i - 1];
matrix[size - i - 1][size - j - 1] = matrix[j][size - i - 1];
// move the top line elements to the rightmost column
matrix[j][size - i - 1] = temp;
}
}
}
我转了两个小时,已经彻底晕菜了, 请高人给我指点一下我哪里出了问题。 谢谢! |
a********m 发帖数: 15480 | 2 至少你这个只移动了一半的数据吧。
【在 i******e 的大作中提到】 : 关于第一章的N*N矩阵向右旋转90度的题。 怎么也得不到想要的结果,我按照答案修改 : 了我的程序,可是还是不对。 : 我得到的结果是: : Original matrix: : 0 1 2 3 4 5 6 7 8 9 : 10 11 12 13 14 15 16 17 18 19 : 20 21 22 23 24 25 26 27 28 29 : 30 31 32 33 34 35 36 37 38 39 : 40 41 42 43 44 45 46 47 48 49 : 50 51 52 53 54 55 56 57 58 59
|
f*******t 发帖数: 7549 | 3 for (int j = i; j < size - i - 1; ++j) |
z*****n 发帖数: 447 | 4 另外有个办法是,先做矩阵转置,再把各行reverse,就把矩阵右旋90度了 |
i******e 发帖数: 273 | 5 这个方法好, 超赞。
谢谢各位!
【在 z*****n 的大作中提到】 : 另外有个办法是,先做矩阵转置,再把各行reverse,就把矩阵右旋90度了
|