这样写报错是为什么应该怎么改class ThistlethwaiteSolver public void solveCubeState state 使用 Thistlethwaite 算法解决魔方 TODO 实现 Thistlethwaite 算法的解决逻辑 第一步:完成顶层十字 TODO 实现完成顶层十字的逻辑 void solveTopCrossCube& c
问题在于在ThistlethwaiteSolver类中定义了一个solveTopCross函数,但是该函数应该是ThistlethwaiteSolver类的成员函数,而不是solve函数的内部函数。应该将solveTopCross函数移出solve函数内部,并将其声明为ThistlethwaiteSolver类的public成员函数。修改后的代码如下:
class ThistlethwaiteSolver { public: void solve(CubeState state) { // 使用 Thistlethwaite 算法解决魔方 // TODO: 实现 Thistlethwaite 算法的解决逻辑
// 第一步:完成顶层十字
// TODO: 实现完成顶层十字的逻辑
void solveTopCross(Cube& cube);
// 第二步:完成顶层角块
// TODO: 实现完成顶层角块的逻辑
// 第三步:完成中层
// TODO: 实现完成中层的逻辑
// 第四步:完成底层十字
// TODO: 实现完成底层十字的逻辑
// 第五步:完成底层角块
// TODO: 实现完成底层角块的逻辑
// 第六步:完成魔方
// TODO: 实现完成魔方的逻辑
}
void solveTopCross(Cube& cube) {
// 定义一个数组,存储需要旋转的面和旋转方式
pair<Color, Rotation> moves[] = {
{GREEN, CLOCKWISE},
{GREEN, DOUBLE},
{GREEN, COUNTERCLOCKWISE},
{BLUE, CLOCKWISE},
{BLUE, DOUBLE},
{BLUE, COUNTERCLOCKWISE},
{ORANGE, CLOCKWISE},
{ORANGE, DOUBLE},
{ORANGE, COUNTERCLOCKWISE},
{RED, CLOCKWISE},
{RED, DOUBLE},
{RED, COUNTERCLOCKWISE}
};
// 遍历所有可能的旋转方式,直到顶层十字完成
for (int i = 0; i < 12; i++) {
// 获取当前魔方状态
CubeState state = cube.getState();
// 获取需要旋转的面和旋转方式
Color face = moves[i].first;
Rotation rotation = moves[i].second;
// 执行旋转操作
cube.rotate(face, rotation);
// 判断是否完成顶层十字
if (state.up[0][1] == YELLOW && state.up[1][0] == YELLOW && state.up[1][2] == YELLOW && state.up[2][1] == YELLOW) {
break;
}
}
}
};
原文地址: https://www.cveoy.top/t/topic/b07c 著作权归作者所有。请勿转载和采集!