C++ 如何在cpp中以预定义顺序遍历数组

C++ 如何在cpp中以预定义顺序遍历数组,c++,arrays,traversal,C++,Arrays,Traversal,对于m*n的数组,例如 {{a, b, c}, {d, e, f}, {g, h, i}} 按a,b,c,f,i,h,g,d,顺时针的顺序遍历它的最佳实践方法是什么 欢迎任何有关技巧的外部链接。只要想想你需要做什么才能完成一个循环。从左上角开始,向右移动m个元素,然后向下移动n-1个元素,向左移动m-1个元素,向上移动n-2个元素,向右移动m-2个元素,依此类推 驴子:我们到了吗?。史瑞克:没有。驴子:我们到了吗?。史瑞克:没有。驴子:我们到了吗?。史瑞克:是的,所以我向右拐。重复

对于m*n的数组,例如

{{a, b, c},  
{d, e, f},  
{g, h, i}}  
按a,b,c,f,i,h,g,d,顺时针的顺序遍历它的最佳实践方法是什么


欢迎任何有关技巧的外部链接。

只要想想你需要做什么才能完成一个循环。从左上角开始,向右移动m个元素,然后向下移动n-1个元素,向左移动m-1个元素,向上移动n-2个元素,向右移动m-2个元素,依此类推

驴子:我们到了吗?。史瑞克:没有。驴子:我们到了吗?。史瑞克:没有。驴子:我们到了吗?。史瑞克:是的,所以我向右拐。重复,直到你到达很远很远的地方

四个枚举,EdirRight、EdrDown、EdrLeft、EdrUp,一个该类型的“currentDirection”变量,一个“visited before”的布尔映射

在do/while回路内,外壳开关接通电流方向。在每种情况下,计算下一个位置,看看它是否在之前被访问过或超出范围。如果以前访问过,您就完成了。如果超出范围,请将currentDirection设置为下一顺时针方向,然后重新计算下一个位置


旋转到中心应该是一个小的延伸-只需在旋转后重新检查“之前访问过”即可。

您尝试过什么?你没有提供太多的信息,你要求我们为你做这项工作。这不是这个网站的目的你可以在谷歌上做一个类似的搜索:如果你想要一个链接,就重新排序一个数组。可怜的老“e”怎么了?每年这个时候孤立数据是很残忍的。@Lemony Andrew OK。如何在一个for循环中顺时针遍历数组。这是我的问题。我已经说过,最好的做法显然是有一种不那么优雅的方式来做到这一点。驴子:我们到了吗?。史瑞克:没有。驴子:我们到了吗?。史瑞克:没有。驴子:我们到了吗?。史瑞克:是的,所以我向右拐。是的。这是一种方式。但根据你的措辞,它需要4个循环。@Introom这是我想到的第一个解决方案:-。可能有更有效的方法,但4循环解决方案可能是最简单的。