【问题标题】:How to traverse an array with predefined order in cpp [closed]如何在cpp中以预定义的顺序遍历数组[关闭]
【发布时间】:2013-12-18 13:50:03
【问题描述】:

对于一个 m*n 的数组,比如说

{{a, b, c},  
{d, e, f},  
{g, h, i}}  

按照 a、b、c、f、i、h、g、d、(顺时针)等顺序遍历它的最佳实践方法是什么?

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

【问题讨论】:

  • 你试过什么?你没有提供太多信息,你要求我们为你做这项工作。这不是这个网站的用途。 - 如果你想要一个链接,你可以简单地在谷歌上进行搜索,类似于:“重新排序数组”。
  • 可怜的老'e'怎么了?在每年的这个时候孤立数据是很残酷的。
  • @Lemony-Andrew OK。如何在一个 for 循环中按顺时针顺序遍历数组。那是我的问题。我已经说过“最佳实践”,因为显然有一种不太优雅的方式来做到这一点。
  • 驴子:“我们到了吗?”。史莱克:“没有”。驴子:“我们到了吗?”。史莱克:“没有”。驴子:“我们到了吗?”。史莱克:“是的,所以我要向右转”。

标签: c++ arrays traversal


【解决方案1】:

驴子:“我们到了吗?”。史莱克:“没有”。驴子:“我们到了吗?”。史莱克:“没有”。驴子:“我们到了吗?”。史莱克:“是的,所以我向右转”。重复,直到到达 Far, Far Away。

四个枚举,EdirRight、EdrDown、EdrLeft、EdrUp,一个该类型的“currentDirection”变量,一个用于“访问过”的布尔映射。

在 do/while 循环中打开 currentDirection 的案例。在每种情况下,计算下一个位置,看看它之前是否被访问过或超出范围。如果之前访问过,您就完成了。如果超出范围,将 currentDirection 设置为下一个顺时针方向并重新计算下一个位置。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的。这是一种方式。但根据你的措辞,它需要 4 个 for 循环。
    • @Introom 这是我想到的第一个解决方案:-)。可能有更有效的方法,但 4 循环解决方案可能是最简单的。
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多