3.2迷宫求解

news/2024/11/7 5:34:46/

首先我没 看懂数据结构书上写得迷宫 求解 不过 不重要了

迷宫求解 需要先有个 迷宫 游戏
以下 是 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;
};

看效果 在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/681684.html

相关文章

谁敢说360不行? 那是你不会用!教你制服360

360的强大与流氓想必是萦绕在大家耳边最耳熟能详的两个词了。 没错&#xff0c;360是很强大却也很流氓&#xff0c;但是稍微动动手就能还你的电脑一片清净 此次测试最新版360安全中心13.0&#xff0c;亲测&#xff0c;以身犯险 针对小白&#xff0c;大佬勿扰 一、安装过程 二、…

360极速浏览器网页保护色

方法一&#xff1a; 360浏览器的“扩展中心”有一个“绿色眼睛”的插件&#xff1b; 但是感觉一般&#xff0c;不够彻底&#xff1b; 方法二&#xff1a; 360急速浏览器是基于开源Chrome浏览器修改的&#xff0c;所以可以直接用Chrome中的插件&#xff1b; 下载“眼睛护航”…

360浏览器怎么开java_360安全浏览器怎么打开javascript

如果您的浏览器不支持JavaScript功能或该功能被禁止&#xff0c;访问许多网站(包括本站)的时候有些功能就无法使用。我们建议您开启JavaScript功能以达到最佳的浏览效果&#xff0c;以下是可能的原因及开启方法&#xff1a; 可能的原因一&#xff1a;您的浏览器可能不支持JavaS…

前端兼容之360安全浏览器

360安全浏览器&#xff08;非极速浏览器版本&#xff09;现有两种内核模式&#xff0c;即“极速模式”和“兼容模式”。 极速模式 以Blink&#xff08;Webkit&#xff09;为内核的浏览模式&#xff0c;Blink内核具有更高的网页浏览速度和更好网页渲染效果。但由于少部分网银、…

js判断360浏览器

随着360的更新&#xff0c;360浏览器和其他浏览器的判断越来越困难&#xff0c;在网上搜了半天&#xff0c;都是使用jquery.ua或者jQuery.browser&#xff0c;或者 window.navigator.userAgent.indexOf(360)!-1&#xff0c;然而并没有什么卵用&#xff0c;兼容模式内核使用的是…

分析了一下360安全卫士的HOOK

by&#xff1a; achillis 分析了一下360的HOOK,通过直接hook KiFastCallEntry实现对所有系统调用的过滤。我分析的版本如下&#xff1a;主程序版本: 6.0.1.1003HookPort.sys版本: 1, 0, 0, 1005HookPort.sys的TimeStamp: 4A8D4AB8简单说明&#xff1a;360把所有被hook的系统服…

360 img

untiy2019.3 创建3张render texture left和right Dimension 为cube 生成结果得 render texture Dimension 为2D public class Demo : MonoBehaviour {public RenderTexture cubemapLeftEye;public RenderTexture cubemapRightEye;public RenderTexture equirect;public Came…

360chunqiu2017_smallest

360chunqiu2017_smallest 查看保护 程序只给了这一点点东西&#xff0c;read(0, rsp, 0x400) 这里的read肯定是有栈溢出的&#xff0c;从rsp这里读所以输入第一个数据的时候就会破坏结构发生错误 攻击思路&#xff1a;想办法去控制rax&#xff0c;因为控制了rax我们就可以调…