老鼠走迷宫游戏c语言代码
时间: 2023-07-31 10:13:42 浏览: 62
好的,这是一个简单的C语言代码,用于实现老鼠走迷宫游戏。请注意,这只是一个示例代码,您需要根据具体情况进行修改。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ROW 10
#define COL 10
// 定义迷宫
int maze[ROW][COL] = {
{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 dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 手动输入
// 定义栈的结构体
typedef struct {
int x;
int y;
} Stack;
Stack stack[ROW * COL];
int top = -1;
// 判断某个点是否为终点
bool isEnd(int x, int y) {
return (x == ROW - 2) && (y == COL - 2); // 手动输入
}
// 压栈
void push(int x, int y) {
top++;
stack[top].x = x;
stack[top].y = y;
}
// 出栈
void pop() {
top--;
}
// 判断栈是否为空
bool isEmpty() {
return top == -1;
}
// 获取栈顶元素
Stack getTop() {
return stack[top];
}
// 打印路径
void printPath() {
int i;
for (i = 0; i <= top; i++) {
printf("(%d, %d) ", stack[i].x, stack[i].y);
}
printf("\n");
}
// 判断某个点是否为可行路径
bool isPath(int x, int y) {
return maze[x][y] == 0;
}
// 判断某个点是否已经走过
bool isVisited(int x, int y) {
return maze[x][y] == 2;
}
// 标记某个点为已经走过
void markVisited(int x, int y) {
maze[x][y] = 2;
}
// 回溯函数,递归实现老鼠走迷宫
void backtrack(int x, int y) {
int i;
if (isEnd(x, y)) {
push(x, y);
printPath();
pop();
return;
}
for (i = 0; i < 4; i++) {
int next_x = x + dir[i][0];
int next_y = y + dir[i][1];
if (isPath(next_x, next_y) && !isVisited(next_x, next_y)) {
markVisited(next_x, next_y);
push(x, y);
backtrack(next_x, next_y);
pop();
maze[next_x][next_y] = 0; // 恢复现场
}
}
}
int main() {
markVisited(1, 1); // 标记起点为已经走过
push(1, 1); // 入栈
backtrack(1, 1); // 回溯
return 0;
}
```
请注意,上述代码只是一个示例,您需要根据实际情况进行修改,比如修改迷宫的大小、起点和终点的坐标等。此外,回溯算法的时间复杂度较高,可能会导致程序运行时间过长。