算法:走迷宫
来源:互联网 发布:网络合同纠纷判决 编辑:程序博客网 时间:2024/05/22 03:02
package com.bxh.algorithms.OtherAlgorithms;import java.util.Queue;import java.util.concurrent.LinkedBlockingDeque;/** * Created by bxh on 7/27/17. */public class BFS { int[][] maze = { {0, 1, 0, 0, 0}, {0, 1, 0, 1, 0}, {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 1, 0} }; Node[][] nodes = new Node[maze.length][maze[0].length]; int[][] dir = { {0, 1},//右 {1, 0},//下 {0, -1},//左 {-1, 0}//上 }; public void test() { //init nodes arrays initNodes(); boolean x = getPath(nodes[0][0], nodes[4][4]); } public void initNodes() { //init nodes for (int i = 0; i < maze.length; i++) { for (int j = 0; j < maze[0].length; j++) { nodes[i][j] = new Node(i, j, maze[i][j]); } } } public boolean getPath(Node start, Node end) { //real calculation Queue<Node> queue = new LinkedBlockingDeque(); start.visted = true; queue.add(start); while (queue.size() > 0) { Node cur = queue.poll(); if (cur.equals(end)) { System.out.println("---new cur ,end !"); print(cur); return true; } //四个方向 for (int i = 0; i < 4; i++) { //相邻节点 int lx = cur.x + dir[i][0]; int ly = cur.y + dir[i][1]; System.out.println("---lx=" + lx + "---ly=" + ly + "--i=" + i); System.out.println("---cur.x=" + cur.x + "---cur.y=" + cur.y + "--i=" + i); if (lx < 0 || ly < 0 || lx >= 5 || ly >= 5) { continue; } Node lNode = nodes[lx][ly]; //已经访问过,不走回头路 if (lNode.visted) { System.out.println("---already visited"); print(lNode); continue; } lNode.visted = true; if (lNode.v == 1) { continue; } if (lNode.equals(cur)) { System.out.println("---this is end node"); print(lNode); return true; } else { queue.add(lNode); System.out.println("----add to queue"); print(lNode); } } } return false; } public void print(Node n) { System.out.println("pos is (" + n.x + "," + n.y + ")"); } static class Node { int x; int y; int v; boolean visted; Node(int[] a) { x = a[0]; y = a[1]; } Node(int a, int b) { x = a; y = b; } Node(int a, int b, int c) { x = a; y = b; v = c; } @Override public boolean equals(Object obj) { Node n = (Node) obj; if (n.x == this.x && n.y == this.y && n.v == this.v) { return true; } return super.equals(obj); } }}
0:可以通过
1:禁止通行
上面的代码画个图的话大致是走了下图的路线,能到达终点的路线不止一条。
阅读全文
0 0
- 走迷宫算法
- 老鼠走迷宫算法
- 走迷宫回溯算法
- 算法竞赛-走迷宫
- 算法:走迷宫
- java实现走迷宫算法
- 老鼠走迷宫递归算法
- 走迷宫 A*算法 广度优先算法
- 经典游戏算法之走迷宫
- 老鼠走迷宫算法中的一点优化
- 【算法】老鼠走迷宫问题的解答
- 每日一算法:老鼠走迷宫(一)
- 算法思考--------老鼠走迷宫(一)
- 算法思考--------老鼠走迷宫(二)
- 电子老鼠走迷宫-搜索算法
- python 使用分水岭算法实现走迷宫
- 算法练习-NOJ-1141-走迷宫
- noj算法题——走迷宫
- 高级依赖配置
- Centos7.2 JDK安装 + Tomcat安装 + 防火墙配置
- MySQL limite用法
- Lombok 学习
- Android "已安装了存在签名冲突的同名数据包"
- 算法:走迷宫
- flex BorderImage
- hdu 1012 constructing the road
- memcpy_s 参数问题
- 荷兰研究人员提突破性想法:用红外线传输网络_比WiFi快100倍
- AsyncTask原理
- C
- CentOS mariaDB10升级成mysql5.6
- 最长上升子序列