Java————迷宫问题
生活随笔
收集整理的這篇文章主要介紹了
Java————迷宫问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
它表示一個迷宮,其中的1表示墻壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求編程序找出從左上角到右下角的最短路線。
?
package algorithm_java;import java.util.Scanner; import java.util.Stack;/*** 路徑問題 可以走的最小路徑*/class Node{public int x;public int y;Node(int x, int y){this.x = x;this.y = y;} }public class Labyrinth_Path {public static void main(String[] args){Scanner scanner = new Scanner(System.in);int labyrinth[][] = new int[5][5];for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {labyrinth[i][j] = scanner.nextInt();}}judge(labyrinth);}private static void judge(int[][] labyrinth_1) {int[][] dir = {{1, 0}, {0, 1}}; // 行走的方向Stack<Node> stack = new Stack<>(); // 設置一個棧來存儲信息int [][] visited = new int[5][5]; // 標記是否被訪問 和labyrinth大小一致Node start = new Node(0, 0); // 開始的節點信息Node end = new Node(4, 4); // 結束的位置visited[start.x][start.y] = 1; // 將起點信息標記為1stack.push(start); // 將起點信息壓棧while (!stack.isEmpty()){ // 不為空沒有找到解boolean flag = false; // 標記是否找了一個方向Node pek = stack.peek();if (pek.x == end.x && pek.y == end.y){break;} else {for (int i = 0; i < 2; i++) {Node nbr = new Node(pek.x + dir[i][0], pek.y + dir[i][1]);// 判斷是否滿足條件if (nbr.x >= 0 && nbr.x < 5 && nbr.y >= 0 && nbr.y < 5 && labyrinth_1[nbr.x][nbr.y] == 0 && visited[nbr.x][nbr.y] == 0){stack.push(nbr);visited[nbr.x][nbr.y] = 1;flag = true;break;}}if (flag){ // 找到了方向 就不用執行出棧 一直往下找continue;}stack.pop(); // 兩個方向都不可以出棧 }}Stack<Node> stackRev = new Stack<>(); // 調整棧的內容while (!stack.isEmpty()){stackRev.push(stack.pop());}while (!stackRev.isEmpty()){System.out.println("(" + stackRev.peek().x + "," + stackRev.peek().y + " )");stackRev.pop();}} }?
轉載于:https://www.cnblogs.com/future-dream/p/10695104.html
總結
以上是生活随笔為你收集整理的Java————迷宫问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优秀程序员简历模板
- 下一篇: Eclipse Memory Analy