算法课设之迷宫求解问题

问题描述

迷宫问题求解

• 使用深度优先的方法解决迷宫问题

• 规定迷宫的最外围为一圈墙,给出起点和终点要求输出一条正确的路径,但不要求为最短路径

• 使用opencv实现可视化,演示一个动态求解迷宫的过程

 

1)在迷宫求解问题上,看似些许有些难度,但是其实很简单,用一种称为广度搜索的算法,将玩家选定的初始点为出发点,向四周搜索可通行的位置,算法的设计:下—>右—>上—>左—>下,根据这个一直搜索下去。直到找到终点,否则,显示错误。

  2)为了避免多次检验是否走到边沿,将迷宫周围各镶上一条取值为九的边,相当于在迷宫的周围布上一圈无法通过的墙。

  3)为了避免有的点被重复到达,应标志通过的位置,可以采取一个栈来标记已通过的位置,当进入死胡同的时候进行回溯。

  4)当无解的时候进行错误输出即可。

源码如下

public class Maze implements MouseListener {
    static Grid[][] grid;
    static MyStack path;
    static Position start;
    static Position end;
    static int WIDTH;
    static int HEIGHT;
    JTextField start1;
    JTextField end1;
    JTextField out;
    boolean isMousePressed;

    public Maze(int width, int height) {
        WIDTH = width + 2;
        HEIGHT = height + 2;
        grid = new Grid[WIDTH][HEIGHT];
        this.layout(width + 2, height + 2);
    }

    private void layout(int width, int height) {
        int sideLength = 40;
        int frameWidth = sideLength * width + 20;
        int frameHeight = sideLength * (height + 2) + 32;
        JFrame frame = new JFrame();
        frame.setTitle("Maze Solution");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setSize(frameWidth, frameHeight);
        frame.addMouseListener(this);
        frame.setLayout(null);

        int i;
        for(i = 1; i < width - 1; ++i) {
            for(int j = 1; j < height - 1; ++j) {
                grid[i][j] = new Grid();
                grid[i][j].addMouseListener(this);
                frame.add(grid[i][j]);
                grid[i][j].setBounds(sideLength * i, sideLength * j, sideLength, sideLength);
            }
        }

        for(i = 1; i < width - 1; ++i) {
            grid[0][i] = new Grid(i);
            frame.add(grid[0][i]);
            grid[0][i].setBounds(sideLengt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值