`
Wangwei86609
  • 浏览: 3958 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据结构-迷宫算法-java实现

阅读更多
package com.citi.ww03140.ds.maze;

public class Cell {

    private int i;

    private int j;

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public int getJ() {
        return j;
    }

    public void setJ(int j) {
        this.j = j;
    }

    public Cell(int i, int j) {
        this.i = i;
        this.j = j;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + i;
        result = prime * result + j;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Cell other = (Cell) obj;
        if (i != other.i)
            return false;
        if (j != other.j)
            return false;
        return true;
    }

}

package com.citi.ww03140.ds.maze;

import java.util.Stack;

public class Maze {

    private final int BLIND_SIZE=3;

    public final static int WALL=-1;

    public final static int PASSAGE_WAY=0;

    private final Stack<Cell> path=new Stack<Cell>();

    private int[][] grids=new int[0][0];

    private Cell exitCell;

    private Cell curCell=new Cell(0,0);

    public Cell getExitCell() {
        return exitCell;
    }

    public void setExitCell(Cell exitCell) {
        this.exitCell = exitCell;
    }

    public Cell getCurCell() {
        return curCell;
    }

    public void setCurCell(Cell curCell) {
        this.curCell = curCell;
    }

    public Maze(int[][] grids, int ei,int ej){
        this.grids=grids;
        exitCell=new Cell(ei,ej);
    }

    public int[][] getGrids() {
        return grids;
    }

    public void seekPath(){

        //while(!curCell.equals(exitCell)){
        //    System.out.println(curCell.getI()+","+curCell.getJ());
            grids[curCell.getI()][curCell.getJ()]=(grids[curCell.getI()][curCell.getJ()]+2);
            Cell ncell=nextCell(curCell.getI(),curCell.getJ());
            if(ncell==null){
                grids[curCell.getI()][curCell.getJ()]=BLIND_SIZE;
                path.pop();
                ncell=path.peek();
            }
            curCell=ncell;
            if(!path.contains(curCell)){
                path.push(curCell);
            }
        //}
        printResult();
    }

    private void printResult(){
        for(int i=0;i<grids.length;i++){
            for(int j=0;j<grids[i].length;j++){
                System.out.print(grids[i][j]+",  ");
            }
            System.out.println();
        }
    }
    /**
     * 四个方向寻找出路
     * @param i
     * @param j
     * @return
     */
    private Cell nextCell(int i,int j){
        Cell ncell=detectNorthGrid(i,j);
        if(ncell!=null){
            return ncell;
        }
        Cell wcell=detectWestGrid(i,j);
        if(wcell!=null){
            return wcell;
        }
        Cell ecell=detectEastGrid(i,j);
        if(ecell!=null){
            return ecell;
        }
        Cell scell=detectSouthGrid(i,j);
        if(scell!=null){
            return scell;
        }
        return null;
    }


    protected void setBlindSide(int i, int j){
        grids[i][j]=BLIND_SIZE;
    }

    private Cell detectEastGrid(int i, int j){
        if(j+1>=grids[i].length){
            return null;
        }
        int eastGrid=grids[i][j+1];
        return getCell(i, j+1, eastGrid);
    }

    private Cell detectWestGrid(int i, int j){
        if(j-1<0){
            return null;
        }
        int eastGrid=grids[i][j-1];
        return getCell(i, j-1, eastGrid);
    }

    private Cell getCell(int i, int j, int eastGrid) {
        if(eastGrid==0){
            return new Cell(i,j);
        }
        return null;
    }

    private Cell detectNorthGrid(int i, int j){
        if(i-1<0){
            return null;
        }
        int eastGrid=grids[i-1][j];
        return getCell(i-1, j, eastGrid);
    }

    private Cell detectSouthGrid(int i, int j){
        if(i+1>=grids.length){
            return null;
        }
        int eastGrid=grids[i+1][j];
        return getCell(i+1, j, eastGrid);
    }

    public static void main(String[] args){

        //maze.seekPath(0, 0);
    }
}

package com.citi.ww03140.ds.maze;

import java.awt.Color;
import java.awt.Graphics;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class MazeFrame extends JFrame {

    private final Maze maze;

    private final int LEN=50;

    private final int[][] grids = {
            {0,0,1,0,0,0,1,1},
            {1,0,0,0,1,0,0,0},
            {0,1,1,0,0,0,1,0},
            {0,1,0,0,1,0,0,0},
            {1,0,0,1,0,0,0,1},
            {0,0,0,0,0,1,0,0}
            };

    private final java.util.Timer timer = new java.util.Timer();

    public MazeFrame() {
        setTitle("Maze");
        getContentPane().add(new ArcsPanel());

        maze=new Maze(grids,5,7);
        //timer
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if(!maze.getCurCell().equals(maze.getExitCell())){
                    repaint();
                }
            }
        }, 0, 1000);
    }

    public static void main(String[] args) {
        MazeFrame frame = new MazeFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    class ArcsPanel extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            maze.seekPath();
            draw(g);
        }

        private void draw(Graphics g){
           int[][] grids= maze.getGrids();
           for(int i=0;i<grids.length;i++){
               for(int j=0;j<grids[i].length;j++){

                   if(grids[i][j]==0){
                       g.setColor(Color.BLUE);
                       g.drawRect(i*LEN, j*LEN, LEN, LEN);
                   }else if(grids[i][j]!=0){
                       g.setColor(Color.BLACK);
                       g.fillRect(i*LEN, j*LEN, LEN, LEN);
                   }
                   if(grids[i][j]%2==0){
                       g.setColor(Color.ORANGE);
                       g.drawRect(i*LEN, j*LEN, LEN, LEN);
                   }
                   if(i==maze.getCurCell().getI() && j==maze.getCurCell().getJ()){
                       g.setColor(Color.YELLOW);
                       g.fillRect(i*LEN, j*LEN, LEN, LEN);
                   }
               }
           }
        }

    }
}

分享到:
评论

相关推荐

    labyrinth-java.rar_Java 数据结构_Java 迷宫_数据结构 java_迷宫 java_迷宫算法

    "src"文件夹则通常存放源代码,我们可以在这里看到迷宫算法的具体实现,包括数据结构的设计和搜索算法的代码。 通过分析这个项目,开发者不仅可以学习到如何使用Java来创建和操作数据结构,还能深入理解搜索算法的...

    java数据结构与算法.pdf

    Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...

    数据结构课程设计迷宫算法的实现-JAVA.doc

    数据结构课程设计迷宫算法的实现-JAVA 数据结构课程设计迷宫算法的实现是使用 JAVA 语言编写的,旨在设计一个迷宫算法的实现,提供图形用户界面来展示迷宫的大小、入口及出口位置和初始状态等,并演示走迷宫的过程...

    数据结构-栈的应用-迷宫求解

    通过理解栈的工作原理以及如何将其应用于迷宫求解,我们可以更好地掌握数据结构在实际问题中的运用,并为后续学习更复杂的算法打下坚实基础。 总的来说,利用栈进行迷宫求解是一种高效且直观的方法。通过将待处理的...

    数据结构课程设计迷宫算法的实现_JAVA.doc

    数据结构课程设计迷宫算法的实现_JAVA.doc是一份数据结构课程设计相关的文档,主要介绍了迷宫算法的实现,包括递归算法、使用栈作为辅助结构、使用队列作为辅助结构三种方法,并使用JAVA语言实现图形用户界面。...

    数据结构(Java)迷宫实现

    总之,利用Java和栈数据结构解决迷宫问题是一个很好的实践项目,它能够帮助我们深入理解数据结构与算法在实际问题中的应用。在进行这样的实践作业时,不仅要关注代码的实现,还要注重代码的可读性和优化,这对提升...

    迷宫算法(Java)

    本文将深入探讨使用Java实现迷宫算法,特别是结合搜索回溯策略,并带有方向倾向性。 首先,我们要理解迷宫问题的基本框架。迷宫通常可以表示为一个二维网格,每个单元格可能是开放路径(可以通过)或障碍(无法通过...

    基于JAVA的迷宫自动寻路算法实现

    在本文中,我们将深入探讨如何使用Java实现基于迷宫的自动寻路算法。这个项目的目标是设计一个系统,允许用户通过鼠标点击设定目的地,然后由一个方块角色自动找到从起点到终点的路径。该系统利用了Java的...

    java实现的数据结构与算法

    《Java实现的数据结构与算法》是一本全面介绍数据结构和算法实现的书籍,以Java语言为载体,涵盖了面向对象程序设计的基本概念和特性,并深入探讨了数据结构与算法的方方面面,包括各种数据结构的基本概念、算法的...

    数据结构课程设计--迷宫问题

    在数据结构课程设计中,迷宫问题是一个经典且有趣的议题,它涉及到图论、搜索算法以及数据结构的应用。迷宫问题通常被理解为一个寻路问题,目标是找到从起点到终点的有效路径。在这个课程设计中,你可能会接触到以下...

    Java数据结构与算法(第二版)

    ### Java数据结构与算法(第二版) ...此外,该书还可能涵盖了一些高级主题,如高级数据结构(例如AVL树、Trie树等)、高级算法(如高级搜索技术、高级排序技术等),以及它们在Java环境下的具体实现方法。

    Java数据结构和算法(第二版),算法经典案例(C语言)

    《Java数据结构和算法(第二版)》与《算法经典案例(C语言)》这两本书是IT领域的宝贵资源,尤其对于初学者和希望在面试中脱颖而出的开发者来说,它们提供了深入理解数据结构和算法的基础。数据结构是编程的核心,它...

    数据结构课设-老鼠走迷宫游戏-java-swing

    在本项目"数据结构课设-老鼠走迷宫游戏-java-swing"中,开发者通过Java Swing构建了一个基于数据结构的游戏,让玩家控制一只老鼠在迷宫中寻找出路,同时还要避开猫的追捕并收集道具。这个项目展示了如何将编程理论与...

    java课程设计---迷宫问题详解

    通过解决迷宫问题,我们可以学习到如何利用数据结构和算法有效地在复杂环境中寻找最优路径。 首先,迷宫通常可以表示为二维网格,每个节点代表一个位置,连接的边表示可以通过的路径。在Java中,我们可以使用二维...

    数据结构与算法(JAVA语言版)

    ### 数据结构与算法(JAVA语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍Java中的基本数据类型,包括整型、浮点型、字符型等,并解释了这些类型的运算规则。 - *...

    java数据结构于算法(第二版)_书中示例代码

    书中的代码示例涵盖了上述知识点,可能包括具体的数据结构实现(如自定义栈、队列、树等),算法的Java实现(如排序、查找),以及Java特性的应用实例。通过阅读和实践这些代码,读者可以加深对数据结构和算法的...

Global site tag (gtag.js) - Google Analytics