首先我没 看懂数据结构书上写得迷宫 求解 不过 不重要了
迷宫求解 需要先有个 迷宫 游戏
以下 是 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,bPattern 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+1if (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;
};
看效果