输入一个M*N矩阵,按照从外向里以顺时针的顺序依次为1,2,3,4,5,6,...........M*N。
如:4*4矩阵
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
思路:从四个方向上依次遍历,关键是判断哪些位置是已经存放的,哪些是还未放的,这里用0表示该处是空的,非0表示已经存放过。四个方向依次是: 向左(y++){0, 1}, 向下(x++){1,0}, 向右(y--){0, -1}, 向上(x--){-1, 0}。
#include <iostream>
using namespace std;
template<int R, int C>
class SpinMatrix
{
private:
int m_matrix[R][C];
struct Offset
{
int dx;
int dy;
};
bool valid(int x, int y);
public:
SpinMatrix();
void run();
void println();
int rows();
int columns();
};
template<int R, int C>
SpinMa