所以我在看一个问题,我只是不能弄清楚。至少在任何方面我都不满意。
如何在二维数组中旋转值
如果数组是
1 2 3
4 5 6
7 8 9
旋转后应该是
4 1 2
7 5 3
8 9 6
输入来自一个文件,其中第一个值是行/列的数量。所以它可以是2x2矩阵,3x 3矩阵,4x4矩阵,等等
谁能帮我一下吗?循环:
int x=0, y=0;
int prev = matr[0][0];
do{
if (x==0 && y<dim){ // move right on top row
y++;
}
else if(y==dim-1 && x<dim){ // move down
x++;
}
else if(x==dim-1 && y>0){ // move left on bottom row
y--;
}
else{
x--;
}
curr = matr[x][y];
matr[x][y] = prev;
prev = curr;
}while (x==0 && y==0);
与其说这是一个算法,不如说是一个简单的解决方案。
我认为这个问题的答案可以由4个子方法组成:MoveTopRow()
, MoveBottomRow()
, MoveLeftColumn()
和MoveRightColumn()
。
一般来说,创建一个新的矩阵并使用这些方法填充值。例如:
void MoveTopRow(int dimention)
{
new_matrix[0][0] = old_matrix[1][0];
for (int i = 1 ; i < dimention ; i++)
{
new_matrix[0][i] = old_matrix[0][i-1];
}
}