zoukankan      html  css  js  c++  java
  • Java小案例-(逃离迷宫)

    Java小案例-(逃离迷宫)

    一,迷宫需求描述:

    1,用户输入迷宫图(限制方形):字母1位墙,0为通,e为出口,m为入口,*为已访问的位置,用外围1围住迷宫

    2,运行轨迹右,左,下,上

    3,判断该迷宫是否能从入口走到出口,并将搜索过程输出

    二,迷宫实现:

    1,迷宫元素类MazeCell:

    package smalldemo.maze;
    
     class MazeCell {
      public int x,y;
      public MazeCell(){
      }
      public MazeCell(int x,int y){
          this.x=x;
          this.y=y;
      }
      public boolean equals(MazeCell cell){
         return x==cell.x && y==cell.y;
      }
    }

    2,迷宫搜索类MazeUtils:

    package smalldemo.maze;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.util.Stack;
    class MazeUtils {
        private int rows,columns;
        private MazeCell currentCell,exitCell=new MazeCell(),entryCell=new MazeCell();
        private final char wall='1',passage='0',visited='*',entryMarker='m',exitMarker='e';
        private char[][] stores;
        private Stack<MazeCell> mazePath=new Stack<MazeCell>();
        MazeUtils(){
            int row=0,column=0;
    
            InputStreamReader in=new InputStreamReader(System.in);
            BufferedReader buf=new BufferedReader(in);
            Stack<String> mazeRows=new Stack<String>();
            System.out.println("Enter a rectangular maze using the following"+
            "characters
    m -entry
    e -exit
    1 - wall 
    0 - passage
    "+"Enter one line at one time:" +
                    "end with Ctrl- D:");
            try {
                String str=buf.readLine();
                while(str !=null) {
                    row += 1;
                    columns = str.length();
                    str = "1" + str + "1";
                    mazeRows.push(str);
                    if (str.indexOf(entryMarker) != -1) {
                        entryCell.x = row;
                        entryCell.y = str.indexOf(entryMarker);
                    }
                    if (str.indexOf(exitMarker) != -1) {
                        exitCell.x = row;
                        exitCell.y = str.indexOf(exitMarker);
                    }
                    str = buf.readLine();
    
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            rows=row;
            stores=new char[rows+2][];
            stores[0]=new char[columns+2];
            for(;!mazeRows.empty();row --){
                stores[row]=mazeRows.pop().toCharArray();
            }
            stores[rows+1]=new char[columns+2];
            for(int i=0;i<columns+2;i+=1){
                stores[0][i]=wall;
                stores[rows+1][i]=wall;
            }
        }
        private void display(PrintStream out){
            for(int row =0;row <rows +1;row+=1){
                out.println(stores[row]);
            }
            out.println();
        }
        private void pushUnvisited(int row,int col){
            if(stores[row][col] ==passage || stores[row][col] == exitMarker){
                mazePath.push(new MazeCell(row,col));
            }
        }
        public void exitMaze(PrintStream out){
            currentCell=entryCell;
            out.println();
            while (!currentCell.equals(exitCell)){
                int x=currentCell.x;
                int y=currentCell.y;
                display(System.out);
                stores[x][y]=visited;
                pushUnvisited(x-1,y);
                pushUnvisited(x+1,y);
                pushUnvisited(x,y-1);
                pushUnvisited(x,y+1);
                if(mazePath.isEmpty()){
                    display(out);
                    out.println("Failure");
                    return;
                }
                else{
                    currentCell=mazePath.pop();
                }
            }
            display(out);
            out.println("Success!");
        }
        public static void main(String[] args){
            new MazeUtils().exitMaze(System.out);
        }
    }

    3,结果是:

    Enter a rectangular maze using the followingcharacters
    m -entry
    e -exit
    1 - wall 
    0 - passage
    Enter one line at one time:end with Ctrl- D:
    1101
    000e
    00m1
    ^D
    
    111111
    111011
    1000e1
    100m11
    
    111111
    111011
    1000e1
    100*11
    
    111111
    111011
    1000e1
    10**11
    
    111111
    111011
    1000e1
    1***11
    
    111111
    111011
    1*00e1
    1***11
    
    111111
    111011
    1**0e1
    1***11
    
    111111
    111011
    1***e1
    1***11
    
    Success!
    
    Process finished with exit code 0
    View Code
  • 相关阅读:
    【The VC Dimension】林轩田机器学习基石
    N天学习一个Linux命令之ln
    charles支持https抓包
    N天学习一个Linux命令之grep
    N天学习一个Linux命令之帮助命令:man
    一个神奇的PHP框架:Phalcon 之编译安装
    让我们加密吧Let's encrypt
    会员卡系统接入微信卡券那些事儿
    Windows安装php Oracle扩展
    Bitnami LNMP集成包安装简单总结
  • 原文地址:https://www.cnblogs.com/ksWorld/p/7398224.html
Copyright © 2011-2022 走看看