对于m * n的数组,请说
{{a, b, c},
{d, e, f},
{g, h, i}}
在a,b,c,f,i,h,g,d(顺时针)等顺序中遍历它的最佳做法是什么?
热烈欢迎任何相关技巧的外部链接。
答案 0 :(得分:2)
四个枚举,EdirRight,EdrDown,EdrLeft,EdrUp,该类型的'currentDirection'变量,'之前访问'的布尔地图。
在do / while循环中打开currentDirection的case。在每种情况下,计算下一个位置,看看它是否已被访问过或超出界限。如果以前访问过,那么你就完成了。如果超出范围,请将currentDirection设置为下一个顺时针方向并重新计算下一个位置。
向中心旋转应该是一个很小的延伸 - 只需在转弯后重新检查'之前访问'。
答案 1 :(得分:0)
想想要做一个圈子你需要做什么。从左上角开始,你向右移动m个元素,然后向下n-1个元素,向左移动m-1个元素,向右移动n-2个元素,向右移动m-2个元素,依此类推。