首先我没 看懂数据结构书上写得迷宫 求解 不过 不重要了
迷宫求解 需要先有个 迷宫 游戏
以下 是 Java写的 控制台迷宫游戏
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MazeGameJ {
public static void main(String[] args) {
//地图模拟
//二维数组 0表示墙 1 表示可以走
//(1,1)表示起点 (8,8)表示终点
int[][] ints = new int[10][10];
//记录走过的位置
//0 位置存储 棋盘横坐标
//1 位置存储棋盘纵坐标
int[][] run_point = new int[100][2];
run_point[0][0]=1;
run_point[0][1]=1;
//初始化地图
init(ints);
//开始游戏
run(ints,run_point);
// show(ints);
}
public static void init(int[][]ints){
//四周墙
for (int i = 0; i <10 ; i++) {
ints[0][i] = 1;
ints[9][i] = 1;
ints[i][0] = 1;
ints[i][9] = 1;
}
//中间墙
ints[8][1]=1;
ints[4][2]=1;
ints[6][2]=1;
ints[7][2]=1;
ints[1][3]=1;
ints[2][3]=1;
ints[4][3]=1;
ints[7][3]=1;
ints[4][4]=1;
ints[5][4]=1;
ints[7][4]=1;
ints[7][5]=1;
ints[3][6]=1;
ints[6][6]=1;
ints[7][6]=1;
ints[2][7]=1;
ints[7][7]=1;
ints[3][3]=1;
ints[4][6]=1;
ints[5][6]=1;
ints[2][5]=1;
}
public static void show(int[][] ints,int[][] run_point,int step){
for (int i = 0; i <= step; i++) {
ints[run_point[step][0]][run_point[step][1]]=2;
}
for (int i = 0; i <10 ; i++) {
for (int j = 0; j <10 ; j++) {
if(ints[i][j]==0){
System.out.format("\33[32;1m");
System.out.print("A");
System.out.print(" ");
}else if(ints[i][j]==2){
System.out.format("\33[0m");
System.out.print("B");
System.out.print(" ");
}else {
System.out.format("\33[31;1m");
System.out.print("#");
System.out.print(" ");
}
}
System.out.println();
}
}
public static void run(int[][] ints,int[][] run_point){
int step =0;
show(ints,run_point,step);
Scanner scanner = new Scanner(System.in);
while (true){
//步数
System.out.format("\33[0m");
System.out.print("请输入一个坐标:\n");
String s = scanner.nextLine();
//输入合法性a,b
Pattern pattern = Pattern.compile("[1-8],[1-8]");
Matcher matcher = pattern.matcher(s);
if(matcher.matches()){
String[] split = s.split(",");
//位置连续性检查
if((run_point[step][0]+1==Integer.parseInt(split[0])&&run_point[step][1] ==Integer.parseInt(split[1]))
|| (run_point[step][0]==Integer.parseInt(split[0])&&run_point[step][1]+1 ==Integer.parseInt(split[1]))
|| (run_point[step][0]-1==Integer.parseInt(split[0])&&run_point[step][1]==Integer.parseInt(split[1]))
|| (run_point[step][0]==Integer.parseInt(split[0])&&run_point[step][1]-1 ==Integer.parseInt(split[1]))
){
//判断是否不能走
if (ints[Integer.parseInt(split[0])][Integer.parseInt(split[1])]==0) {
//判断胜利结束
if (Integer.parseInt(split[0])==8&&Integer.parseInt(split[1])==8) {
step++;
run_point[step][0] = Integer.parseInt(split[0]);
run_point[step][1] = Integer.parseInt(split[1]);
System.out.print("\033[H\033[2J");
System.out.flush();
show(ints,run_point,step);
System.out.println("恭喜你!通关了!");
System.exit(1);
}
step++;
run_point[step][0] = Integer.parseInt(split[0]);
run_point[step][1] = Integer.parseInt(split[1]);
}else {
System.out.println("游戏结束!");
System.exit(1);
}
}else {
System.out.println("输入不合法请重新输入");
}
}else {
System.out.println("输入不合法请重新输入");
}
//显示
System.out.print("\033[H\033[2J");
System.out.flush();
show(ints,run_point,step);
}
}
}
然后求解 下面是 求解 c代码
#include <stdio.h>
typedef int PosTyoe[2];
typedef int MazeType[10][10];
typedef int Status;
typedef struct {
// int ord; //通道块在路径上的顺序
PosTyoe seat; //通道块在迷宫中的坐标位置
// int di; //从通道走向下一通道的方向
}SElemType; //栈的元素类型
Status MazePath(MazeType maze,PosTyoe start,PosTyoe end) {
//利用栈 暴力寻找迷宫出路
//策略 下 右 上 左 的顺序
//创建一个栈 将 初始位置 放在栈里
//用数组模拟栈
int i;
SElemType IninStack__ [1000];
//栈顶位置
i = 0;
//将初始位置 放在栈里
IninStack__[i].seat[0] = start[0];
IninStack__[i].seat[1] = start[1];
maze[IninStack__[i].seat[0]][IninStack__[i].seat[1]] = 1;
++i;
//开始寻找
while (i)
{
//判断是否已经到达终点
if (IninStack__[i - 1].seat[0] + 1 == end[0] && IninStack__[i - 1].seat[1] == end[1]) {
IninStack__[i].seat[0] = IninStack__[i - 1].seat[0] + 1;
IninStack__[i].seat[1] = IninStack__[i - 1].seat[1];
++i;
break;
}
//判断是否已经到达终点
if (IninStack__[i - 1].seat[0] == end[0] && IninStack__[i - 1].seat[1]+1 == end[1]) {
IninStack__[i].seat[0] = IninStack__[i - 1].seat[0];
IninStack__[i].seat[1] = IninStack__[i - 1].seat[1]+1;
++i;
break;
}
//先往下寻找 maze的 i+1
if (maze[IninStack__[i-1].seat[0] + 1][IninStack__[i-1].seat[1]] != 1) {
//如果不是0,表示能通过
//这时候就将这个 位置进栈
IninStack__[i].seat[0] = IninStack__[i - 1].seat[0] + 1;
IninStack__[i].seat[1] = IninStack__[i - 1].seat[1];
//将走过的位置设置为墙 不能 往回走
maze[IninStack__[i - 1].seat[0] + 1][IninStack__[i - 1].seat[1]] = 1;
++i;
continue;
}
//尝试往右走
if (maze[IninStack__[i-1].seat[0] ][IninStack__[i-1].seat[1]+1] != 1)
{
//如果不是0,表示能通过}
//这时候就将这个 位置进栈
IninStack__[i].seat[0] = IninStack__[i - 1].seat[0];
IninStack__[i].seat[1] = IninStack__[i - 1].seat[1] + 1;
//将走过的位置设置为墙 不能 往回走
maze[IninStack__[i - 1].seat[0]][IninStack__[i - 1].seat[1] + 1] = 1;
++i;
continue;
}
//尝试往上走
if (maze[IninStack__[i - 1].seat[0]-1][IninStack__[i - 1].seat[1]] != 1)
{
//如果不是0,表示能通过
//没走过就可以走
//这时候就将这个 位置进栈
IninStack__[i].seat[0] = IninStack__[i - 1].seat[0]-1;
IninStack__[i].seat[1] = IninStack__[i - 1].seat[1];
//将走过的位置设置为墙 不能 往回走
maze[IninStack__[i - 1].seat[0] - 1][IninStack__[i - 1].seat[1]] = 1;
++i;
continue;
}
//尝试往左走
if (maze[IninStack__[i - 1].seat[0] ][IninStack__[i - 1].seat[1]-1] != 1)
{
//如果不是0,表示能通过
//这时候就将这个 位置进栈
IninStack__[i].seat[0] = IninStack__[i - 1].seat[0];
IninStack__[i].seat[1] = IninStack__[i - 1].seat[1]-1;
//将走过的位置设置为墙 不能 往回走
maze[IninStack__[i - 1].seat[0]][IninStack__[i - 1].seat[1] - 1] = 1;
++i;
continue;
}
//如果都没有走通
//标记自己所在点为不通,将自己出栈
maze[IninStack__[i - 1].seat[0]][IninStack__[i - 1].seat[1]] = 1;
--i;
}
if (!i) {
printf("此迷宫没有解\n");
return 0;
}
int j;
for (j = 1; j < i; j++) {
printf("%d,%d\n",IninStack__[j].seat[0], IninStack__[j].seat[1]);
}
return 0;
}
int main() {
MazeType maze;
PosTyoe start;
PosTyoe end;
//四周墙
int i;
for (i = 0; i < 10; i++) {
maze[0][i] = 1;
maze[9][i] = 1;
maze[i][0] = 1;
maze[i][9] = 1;
}
//中间墙
maze[8][1] = 1;
maze[4][2] = 1;
maze[6][2] = 1;
maze[7][2] = 1;
maze[1][3] = 1;
maze[2][3] = 1;
maze[4][3] = 1;
maze[7][3] = 1;
maze[4][4] = 1;
maze[5][4] = 1;
maze[7][4] = 1;
maze[7][5] = 1;
maze[3][6] = 1;
maze[6][6] = 1;
maze[7][6] = 1;
maze[2][7] = 1;
maze[7][7] = 1;
maze[3][3] = 1;
maze[4][6] = 1;
maze[5][6] = 1;
maze[2][5] = 1;
start[0] = 1;
start[1] = 1;
end[0] = 8;
end[1] = 8;
MazePath(maze, start, end);
return 0;
};
看效果