迷宫 java实验
2014-04-20 16:52
183 查看
public class TestThree { static int mazeSize = 12; static char maze[][] = new char [mazeSize][mazeSize]; //保存迷宫地图信息 public static void main(String[] args) { maze(); } static void maze() { //先随机生成迷宫矩阵(mazeSize X mazeSize),{0,1}矩阵,其中1代表通路,0代表墙,并显示出来。 //设置起点和终点,为了简单化,将第一个生成的'1'点设为起点,最后生成的'0'点设为终点 //记录路程,1234分别代表上下左右。 boolean startingOk = false; int startingX = 0, startingY = 0, endingX = 0, endingY = 0; //起点和终点的坐标 //生成以及显示迷宫 System.out.println("随机生成的迷宫地图为:"); System.out.print(" "); for(int i = 0; i<12; i++) { System.out.print(i+" "); } System.out.println(); System.out.print(" ╔"); for(int i = 0; i<24; i++) { System.out.print("═"); } System.out.println("╗"); for(int i = 0; i<12; i++) { System.out.printf("%2d",i); System.out.print("║"); for(int j = 0; j<12; j++) { if( ((float) Math.random()) >= 0.4) { maze[i][j] = '1'; if(startingOk == false) //设置起点 { startingX = i; startingY = j; startingOk = true; System.out.print("♀ "); continue; } endingX = i; //设置终点 endingY = j; System.out.print(" "); } else { maze[i][j] = '0'; System.out.print("██"); } } System.out.print("║"); System.out.println(); } System.out.print(" ╚"); for(int i = 0; i<24; i++) { System.out.print("═"); } System.out.println("╝"); System.out.println("随机生成的起点坐标是:"+startingX+" "+startingY); System.out.println("随机生成的终点坐标是:"+endingX+" "+endingY); //回溯法找路,看是不是有解。 if( findWay(startingX,startingY,endingX,endingY,startingX,startingY) == false) { System.out.println("此迷宫没有出路!!"); } } static boolean findWay(int x,int y,int endingX,int endingY,int startingX,int startingY ) { boolean doFindWay = false; if( x == endingX && y == endingY) { showWay(startingX,startingY,endingX,endingY); return true; } if( x+1 < mazeSize && maze[x+1][y] == '1') //向下走 { maze[x][y] = '↓'; doFindWay = findWay(x+1,y,endingX,endingY,startingX,startingY); maze[x][y] = '1'; if(doFindWay == true) { return true; } } if( y+1 < mazeSize && maze[x][y+1] == '1') //向右走 { maze[x][y] = '→'; doFindWay = findWay(x,y+1,endingX,endingY,startingX,startingY); maze[x][y] = '1'; if(doFindWay == true) { return true; } } if(x-1 >=0 && maze[x-1][y] == '1') //向右走 { maze[x][y] = '↑'; doFindWay = findWay(x-1,y,endingX,endingY,startingX,startingY); maze[x][y] = '1'; if(doFindWay == true) { return true; } } if( y-1 >=0 && maze[x][y-1] == '1') //向右走 { maze[x][y] = '←'; doFindWay = findWay(x,y-1,endingX,endingY,startingX,startingY); maze[x][y] = '1'; if(doFindWay == true) { return true; } } return false; } static void showWay(int startingX, int startingY,int endingX,int endingY) { System.out.print(" "); for(int i = 0; i<12; i++) { System.out.print(i+" "); } System.out.println(); System.out.print(" ╔"); for(int i = 0; i<24; i++) { System.out.print("═"); } System.out.println("╗"); for(int i = 0; i<12; i++) { System.out.printf("%2d",i); System.out.print("║"); for(int j = 0; j<12; j++) { if(i == startingX && j == startingY) { System.out.print("♀ "); continue; } if(i == endingX && j == endingY) { System.out.print("OK"); continue; } if(maze[i][j] == '1') { System.out.print(" "); } else if(maze[i][j] == '0') { System.out.print("██"); } else { System.out.print(maze[i][j]); System.out.print(maze[i][j]); //System.out.print("☆"); } } System.out.print("║"); System.out.println(); } System.out.print(" ╚"); for(int i = 0; i<24; i++) { System.out.print("═"); } System.out.println("╝"); } }
相关文章推荐
- java实验三
- java实验报告三
- 剑指Offer——回溯算法解迷宫问题(java版)
- java实验之swing图形用户界面程序设计及总结
- 《JAVA程序设计》 实验二 Java面向对象程序设计
- Java 递归算法解迷宫问题
- Java第三次实验要求
- java学习日志(六)-- 抽象类实验
- JAVA--第2周实验--输出24个希腊字母
- [SIR数据集实验][2]Java类数据集相应工具使用的小经验
- [Java] 实验12
- Java实验链接
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
- Java第2次实验提纲(Java基本语法与类库)
- 20155219 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
- Java数据传递实验
- java实验4.(2)插入mysql数据库
- java初始化顺序实验代码
- 哈工大java实验 我的QQ
- java设计模式 实验一-简单工厂模式