我尝试使用 BFS 制作魔方求解器的目标。我知道它的所有排列方式可能会很慢。=P 这不是给学校的,以防有人想知道。
可能很容易解决的问题
每当我将加扰魔方的另一个状态放入其中时,queue<array>
它只是一个浅拷贝,所以一旦添加了魔方的其他状态,队列中的先前状态实际上改变并与新的状态相匹配。换句话说,我如何确保内部的所有元素都queue<array>
保持不变?
我已尝试修复此
https://stackoverflow.com/a/129395/984680
我基本上使用此代码在多维数据集从队列中出来时创建它的新副本,然后在之前创建另一个新副本我再次将其放入队列(处于不同状态)。下面的代码显示了在将新副本插入队列之前如何制作新副本。
//make deep copy of ccube (char array)
char[][][] newcube = DeepClone(ccube);
buffer.Enqueue(new State(newcube, calg + face + " ")); //even though newcube gets put into array, it ends up changed after ccube changes
这是从队列前面拉出数组时所做的深度复制。
ccube = DeepClone(buffer.Peek().cube);
即使我多次克隆该数组(有些东西告诉我不需要制作这么多副本),我添加的新状态仍然与旧状态相同。我知道这一点是因为队列中只有 2 个不同的元素,即使我每次都让立方体的所有面都以各种方式转动。
提前感谢任何能够提供帮助的人。