编写一个计算机程序,模拟老鼠走迷宫,该程序假定老鼠有稳定记忆,能记住以前走过的失败路线而不会重复,给出具体代码
时间: 2024-03-12 09:44:34 浏览: 81
老鼠走迷宫的程序
好的,以下是一个使用C++语言实现的老鼠走迷宫程序,满足老鼠有稳定记忆,不会重复走过失败的路线:
```cpp
#include <iostream>
using namespace std;
const int N = 10; // 迷宫大小
int maze[N][N] = { // 迷宫布局
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
int path[N][N] = {0}; // 记录老鼠走过的路径
bool dfs(int x, int y) { // 递归函数
if (x == N-1 && y == N-1) { // 到达终点
path[x][y] = 1;
return true;
}
if (maze[x][y] == 1 || path[x][y] == 1) { // 当前位置不合法
return false;
}
path[x][y] = 1; // 将当前位置加入路径中
if (dfs(x-1, y) || dfs(x+1, y) || dfs(x, y-1) || dfs(x, y+1)) { // 尝试向四个方向前进
return true;
}
path[x][y] = 0; // 如果四个方向都失败了,将当前位置从路径中删除
return false;
}
int main() {
if (dfs(1, 1)) { // 从起点开始递归
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << path[i][j] << " ";
}
cout << endl;
}
}
else { // 没有找到通路
cout << "No solution!" << endl;
}
return 0;
}
```
这个程序中使用了一个二维数组`maze`来表示迷宫的布局,使用另一个二维数组`path`来记录老鼠走过的路径。在递归函数`dfs`中,我们首先判断老鼠是否到达终点,如果是,则返回true;如果不是,则判断老鼠当前位置是否合法,如果不合法,则返回false。如果老鼠当前位置合法,我们将其加入路径中,并依次尝试向上、下、左、右四个方向前进。如果四个方向都失败了,我们将当前位置从路径中删除,并返回false。在程序的主函数中,我们从起点开始递归,并打印出最终的路径。
阅读全文