八数码问题c++代码
时间: 2024-09-28 21:02:29 浏览: 39
八数码问题,也称为汉诺塔游戏,是一个经典的递归问题。在C++中解决这个问题,你可以创建一个简单的函数来模拟棋盘移动的过程。以下是基本的八数码问题的C++代码示例:
```cpp
#include <iostream>
using namespace std;
// 定义棋盘的位置
enum Square {A = 0, B = 1, C = 2};
void moveDisk(int from, int to, char board[3][3]) {
cout << "Moving disk from " << board[from / 3] << (from % 3 + '0') << " to "
<< board[to / 3] << (to % 3 + '0') << endl;
// 交换棋盘位置
swap(board[from][from % 3], board[to][to % 3]);
}
void solveTowerOfHanoi(int n, char board[3][3], char aux[3][3], char goal[3][3]) {
if (n > 0) {
// 递归处理小的盘子
solveTowerOfHanoi(n - 1, board, goal, aux);
// 将最大的盘子从起始点移动到目标点
moveDisk(A, to, board);
// 最后将剩下的盘子移动到最终位置
solveTowerOfHanoi(n - 1, aux, board, goal);
}
}
int main() {
char board[3][3] = {{'A', 'B', 'C'},
{'0', '1', '2'},
{'D', 'E', 'F'}};
char aux[3][3];
char goal[3][3] = board; // 初始时目标板和起始板一样
int numDisks = 3; // 或者根据需要设置
solveTowerOfHanoi(numDisks, board, aux, goal);
return 0;
}
```
这个程序首先定义了棋盘的结构,并通过`solveTowerOfHanoi`函数实现了递归解法。`moveDisk`函数负责实际的盘子移动,而`main`函数则初始化棋盘并调用`solveTowerOfHanoi`。
阅读全文