zoukankan      html  css  js  c++  java
  • java实现迷宫走法

    ** 迷宫走法**

    迷宫问题

    对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更愿意使用“紧贴墙壁,靠右行走”的简单规则。
    下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。

    仔细分析代码中的逻辑,填充缺少的部分。

    把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

    public class Maze
    {
        class Cell
        {
            private int row;
            private int col;
            private Cell from;
            
            public Cell(int row, int col, Cell from)
            {
                this.row = row;
                this.col = col;
                this.from = from;
            }
        }
            
        char[][] maze = 
        {{'#','#','#','#','B','#','#','#','#','#','#','#'},
        {'#','#','#','#','.','.','.','.','#','#','#','#'},
        {'#','#','#','#','.','#','#','#','#','.','.','#'},
        {'#','.','.','.','.','#','#','#','#','#','.','#'},
        {'#','.','#','#','#','#','#','.','#','#','.','#'},
        {'#','.','#','#','#','#','#','.','#','#','.','#'},
        {'#','.','#','#','.','.','.','.','.','.','.','#'},
        {'#','.','#','#','.','#','#','#','.','#','.','#'},
        {'#','.','.','.','.','#','#','#','.','#','.','#'},
        {'#','#','.','#','.','#','#','#','.','#','.','A'},
        {'#','#','.','#','#','#','.','.','.','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#','#','#'}};
        
        public void show()
        {
            for(int i=0; i<maze.length; i++)
            {
                for(int j=0; j<maze[i].length; j++) 
    System.out.print(" " + maze[i][j]);
                System.out.println();
            }
        }
        
        //把与from集合中相邻的可染色节点染色,被染色节点记入 dest
        //一旦发现出口将被染色,则返回当前的“传播源”节点
        public Cell colorCell(Set<Cell> from, Set<Cell> dest)
        {
            Iterator<Cell> it = from.iterator();
            while(it.hasNext())
            {
                Cell a = it.next();
                Cell[] c = new Cell[4];
                c[0] = new Cell(a.row-1, a.col, a);
                c[1] = new Cell(a.row, a.col-1, a);
                c[2] = new Cell(a.row+1, a.col, a);
                c[3] = ___________________________;
                            
                for(int i=0; i<4; i++)
                {
                    if(c[i].row < 0 || c[i].row >= maze.length) continue;
                    if(c[i].col < 0 || c[i].col >= maze[0].length) continue;
                    
                    char x = maze[c[i].row][c[i].col];
                    if(x=='B') return a;
                    if(x=='.') 
                    {
                        maze[c[i].row][c[i].col] = '?';
                        ____________________;
                    }
                }
            }
            return null;
        }
        
        public void resolve()
        {
            Set<Cell> set = new HashSet<Cell>();
            set.add(new Cell(9,11,null));
            
            for(;;)
            {
                Set<Cell> set1 = new HashSet<Cell>();
                Cell a = colorCell(set, set1);
                if(a!=null)
                {
                    System.out.println("找到解!");
                    while(a!=null)
                    {
                        maze[a.row][a.col] = '+';
                        ______________;
                    }
                    break;
                }
                if(set1.isEmpty())
                {
                    System.out.println("无解!");
                    break;
                }
                set = set1;
            }        
        }
        
        public static void main(String[] args)
        {
            Maze m = new Maze();
            m.show();
            m.resolve();
            m.show();    
        }
    }
    
    
    new Cell(a.row, a.col+1, a)
    dest.add(c[i])
    a = a.from
    
  • 相关阅读:
    夏普比率(Sharpe Ratio)
    资管产品与信托产品区别
    通道业务是什么业务?怎么做到为银行做资产从表内到表外的流动性搬运?
    什么是MBS,ABS和CDO
    Oracle的OFA架构
    oracle-TNS是什么?
    Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
    oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件
    linux下安装oracle
    金融人物
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947290.html
Copyright © 2011-2022 走看看