其实就是这张图的思路
for (int m = 0; m < n; ++m)
arr[m] = new int[n];
bool horizontal = true, reversed = false;
int i = 0, j = 0;
for (int k = 1; k < n*n + 1; ++k)
{
if (horizontal)
{
if (!reversed)
{
arr[i][j++] = k;
if (j >= n || arr[i][j] > 0) {
horizontal = (!horizontal);
++i;
--j;
}
}
else
{
arr[i][j--] = k;
if (j < 0 || arr[i][j] > 0)
{
horizontal = (!horizontal);
--i;
++j;
}
}
}
else
{
if (!reversed)
{
arr[i++][j] = k;
if (i >= n || arr[i][j] > 0) {
reversed = (!reversed);
horizontal = (!horizontal);
--i;
--j;
}
}
else
{
arr[i--][j] = k;
if (i < 0 || arr[i][j] > 0)
{
reversed = (!reversed);
horizontal = (!horizontal);
++i;
++j;
}
}
}
}
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
cout << arr[i][j] << " ";
cout << endl;
}
for (i = 0; i < n; ++i)
delete[] arr[i];
delete[] arr;
由于面试面到贪吃蛇回旋数问题,这里记录下,有更好的算法的希望能多提 建议。
问题描述:
输入一个数n 输出如下n*n矩阵
如:n=5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
我用C++实现如上