用于印刷螺旋矩阵的可能算法

时间:2015-02-25 18:02:38

标签: algorithm

让我们说我们必须打印:(对于n = 4)

 1  2  3 4
12 13 14 5
11 16 15 6
10  9  8 7

这只是n = 4的示例输出,算法应该是所有整数的代数 我想并尝试编码思考螺旋旋转这里的索引,即

element: 1 - 2 - 3 - 4 - 5...->16
indexes: 00-01-02-03-13-23...-21

但索引的这种螺旋旋转并没有给我足够的模式来建立一个完整的算法。

然后我通过检查索引号采取了完全不同的方法。按顺序打印的行和列:

    row       coloumn
1>  0    ->       n-1
2> n-1  ->         0
3>   1    ->      n-2
4> n-2  ->         1

但我仍然坚持为此编写算法。我不希望我的家伙在回答中编写代码,所以请

在我上面提到的算法中纠正我,或者如果您有任何新算法,请提供一种解决此问题的新方法。

2 个答案:

答案 0 :(得分:1)

我很有乐趣看到我的其他能干的教师提出了一种明智的,简单的方法来迭代矩阵作为螺旋线,但是当我实现它们时,它们都没有正常工作。

所以我建议你不要考虑任何模式或编码快捷方式来完成这项工作。你几乎肯定会弄错,并花很多时间调试。相反,只需用简单的条件和更新来模拟移动:

1. Move right until you hit the right bonundary, then move one step down if possible
   and increment the top boundary;
2. Move down until you hit the bottom boundary, then move one step left if possible
   and decrement the right boundary;
3. Move left until you hit the left boundary, then move one step up if possible
   and decrement the bottom boundary;
4. Move up until you hit the top boundary, then move one step right if possible
   and increment the left boundary. Go to step (1).

这将导致更多的代码,但它将更易读,更不容易出错。

答案 1 :(得分:1)

考虑层次。

对于16个数字的示例,图层看起来像这样

1st Layer = 1 2 3 4 ... 12
2nd Layer = 13 14 15 16

一旦你找出了哪些图层,你应该能够使用图层编号和该图层中的索引将其转换为(x,y)坐标。

你可以考虑从里到外。请注意,就数学而言,像4 ^ 2这样的偶数正方形看起来与5 ^ 2之类的奇数正方形基本不同。

祝你好运。