我的家庭作业(C++)有问题。我不是要求完整的解决方案,但朝正确的方向倾斜可能会有所帮助。:)
我有一个 NxN 板(最大 N = 100)和那个板上的 1x2 图形(立方体)。立方体的一侧涂成红色,另一侧涂成蓝色。立方体的默认位置是棋盘的左上角,蓝色面朝上:
B B . .
. . . .
. . . .
. . . .
(4x4 示例,B 代表蓝色)
黑板上可能有石头(障碍物)。 我可以用我的身材做的动作:
- 顺时针旋转 90/180/270 度
- 你可以围绕它的右/左/上/下边缘翻转立方体,改变它的“向上颜色”
例如,在默认位置使用向右翻转:
. . R R
. . . .
. . . .
. . . .
然后使用旋转 90:
. . R .
. . R .
. . . .
. . . .
然后使用左翻转:
. B . .
. B . .
. . . .
. . . .
当然,在旋转或翻转时,你不能落在石头上。所以,问题是——对于任何给定的棋盘配置(图形位置和石头位置)编写一个程序,使用最少的移动次数“将立方体带回家”在默认位置(蓝色面朝上!)如果可能,则返回 1,如果不可能,则返回 0。
我觉得这个问题很有趣,但我不得不承认我对此有点困惑。尤其是蓝边/红边部分。我真的不知道如何“翻译”那些我可以用通常的最短路径算法的语言使用的动作(我从来没有使用过这些)。因此,我将不胜感激您提供的每一条建议!:)