- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的家庭作业 (C++) 遇到了问题。我不是要完整的解决方案,但向正确的方向倾斜可能会有所帮助。 :)
我有一个 NxN 板(最大 N = 100)和该板上的一个 1x2 图形(立方体)。立方体的一侧涂成红色,另一侧涂成蓝色。立方体的默认位置是棋盘的左上角,蓝色面朝上:
B B . .
. . . .
. . . .
. . . .
(4x4例子,B代表蓝色)
黑板上可能有石头(障碍物)我可以用我的身材做出的 Action :
例如,在默认位置使用右翻:
. . R R
. . . .
. . . .
. . . .
然后使用旋转 90:
. . R .
. . R .
. . . .
. . . .
然后使用左翻:
. B . .
. B . .
. . . .
. . . .
当然,旋转或翻转时,不能落在石头上。所以,问题是 - 对于任何给定的棋盘配置(图形位置和石头位置)编写一个程序,将“将立方体带回家”到默认位置(蓝色面朝上!)使用最少的数量移动,如果可能则返回 1,如果不可能则返回 0。
我觉得这个问题很有趣,但我不得不承认我对此有点困惑。特别是蓝边/红边部分。我真的不知道如何用通常的最短路径算法的语言来“翻译”那些我可以使用的 Action (而且我从未使用过任何这些算法)。因此,我将不胜感激您能提供的每一条建议! :)
最佳答案
首先,由于要求您找到确切的最佳路径,我会选择 Dijksta's algorithm .
对于此算法,您需要:
给定一个初始位置,您的立方体可以恰好到达 7 个新位置。很容易选择哪些是可能的。
G 只是您到目前为止所做的移动数 + 1 用于下一步 :)
我会使用哈希表来跟踪访问过的位置。 (这可能是最难写的函数),但你现在不需要考虑太多。一个简单的 vector 和逐项比较就可以了。您可以在代码运行后对其进行优化。
最后,您需要检查立方体是否处于其初始位置蓝色面朝上。
关于c++ - 船上有数字的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777897/
我是一名优秀的程序员,十分优秀!