快速业务通道

Java中栈.回溯.迷宫问题求解 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
.PrintStream; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; public class Maze { private int rows = 0, cols = 0;// 迷宫的行数与列数 private char[][] store, path;// 迷宫矩阵 private MazeCell currentCell, exitCell = new MazeCell(), entryCell = new MazeCell();// 当前节点,出口节点,入口节点 private static final char EXIT = ''9'', ENTRY = ''6'', VISITED = ''3'';// 出口标记,入口标记,已经过节点标记 private static final char PASS = ''0'', WALL = ''1'';// 通路标记,墙标记 private Stack<MazeCell> mazeStack = new Stack<MazeCell>();// 探路过程所使用栈 private List<MazeCell> currentList = new LinkedList<MazeCell>();// 路经的路线队列 public Maze() { // 构造迷宫 int row = 0, col = 0; Stack<String> mazeRows = new Stack<String>(); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader buffer = new BufferedReader(isr); System.out.println("Enter a rectangular maze using the following" + " characters: \n6-entry\n9-exit\n1-wall\n0-passage\n" + "Enter one line at a time; end with Ctrl-d;"); try { String str = buffer.readLine(); while (str != null) { row++; cols = str.length(); str = "1" + str + "1"; mazeRows.push(str); if (str.indexOf(EXIT) != -1) { exitCell.setX(row); exitCell.setY(str.indexOf(EXIT)); } if (str.indexOf(ENTRY) != -1) { entryCell.setX(row); entryCell.setY(str.indexOf(ENTRY)); } str = buffer.readLine(); } } catch (IOException e) { e.printStackTrace(); } rows = row; store = new char[rows + 2][]; store[0] = new char[cols + 2]; for (; !mazeRows.empty(); row--) store[row] = (mazeRows.pop()).toCharArray(); store[rows + 1] = new char[cols + 2]; for (col = 0; col <= cols + 1; col++) { store[0][col] = WALL; store[rows + 1][col] = WALL; } path = new char[rows + 2][]; copyArray(store, path); } /** 二维数组复制 */ private void copyArray(char[][] src, char[][] tar) { for (int i = 0; i < src.length; i++) { tar[i] = new char[cols + 2]; for (int j = 0; j < src[i].length; j++) tar[i][j] = src[i][j]; } } /** 二维数组输出 */ private void display(PrintStream out, char[][] carray) { for (int row = 0; row <= rows + 1; row++) out.println(carray[row]); out.println(); } /** 将未访问并可通路的节点压入栈 */ private void pushUnvisited(int row, int col) { if (stor

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号