【使用Java编写的B*算法】
使用XP系统之家Java编写的B*算法
package rpg.stage.path;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import rpg.objs.Point;
public class BFinding {
public BFinding() {
}
protected HashSet<Point> openList = new HashSet<Point>();
protected HashSet<Point> leftList = new HashSet<Point>();
protected HashSet<Point> rightList = new HashSet<Point>();
protected HashSet<Point> closeList = new HashSet<Point>();
public synchronized ArrayList<int[]> find(Point start,Point end,boolean canPenetrate){
if(end == null){
return new ArrayList<int[]>();
}
if(start == null){
return new ArrayList<int[]>();
}
end.clear();
start.clear();
openList.clear();
openList.add(start);
leftList.clear();
rightList.clear();
closeList.clear();
int count = 0;
while(!openList.isEmpty() || !leftList.isEmpty() || !rightList.isEmpty()){
count ++;
if(count>1000)
break;
Iterator<Point> it = openList.iterator();
if(it.hasNext()){
Point p = it.next();
it.remove();
if(sideNext(p,end,0,canPenetrate))break;
}
it = leftList.iterator();
if(it.hasNext()){
Point p = it.next();
it.remove();
if(sideNext(p,end,1,canPenetrate))break;
}
it = rightList.iterator();
if(it.hasNext()){
Point p = it.next();
it.remove();
if(sideNext(p,end,-1,canPenetrate))break;
}
}
final ArrayList<int[]> list = new ArrayList<int[]>();
while(end.parent!=null){
list.add(0,new int[]{end.x,end.y});
end = end.parent;
}
return list;
}
/**
*
* @param p
* @param end 目标点
* @param side 0 direct -1 right 1 left
* @param canPenetrate 可否穿透
*/
转载于:https://www.cnblogs.com/qq12345678/p/3280801.html
【使用Java编写的B*算法】相关推荐
- JAVA编写FCFS(先来先服务算法) 和 SJF(最短进程优先调度算法)
核心代码如下: import java.util.ArrayList; import java.util.Scanner;public class opera {private static doub ...
- java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...
- java编写八皇后算法
/*** 八皇后* @Author:yangle* @Date:2020/9/23* @version:1.0*/ public class test {public static int num = ...
- java实现种子填充算法,Java编写图形学的种子填充算法
用C写的图形学填充算法已经很多了,看到不少帖子都是在问关于如何用Java编写图形学的填充算法,说来也巧,我刚好要做一个这个方面的实验,用的是扫描线种子填充算法,由于时间仓促,代码质量可能不算很高,希望 ...
- java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势
java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...
- java牛客排序算法题_《剑指offer》面试题28:字符串的排列(牛客网版本) java...
输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一个字符 ...
- java中的基本小程序_12个用Java编写基础小程序经典案例(收藏篇)
原标题:12个用Java编写基础小程序&经典案例(收藏篇) 如果是刚接触或者刚学习java,练习一些基础的算法还是必须的,可以提升思维和语法的使用. 1.输出两个int数中的最大值 impor ...
- 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
最新文章
- 解读生命密码的基本手段 ——DNA测序技术的前世今生
- 华为p4支持鸿蒙功能吗_吹过的牛都一步一步给实现了!明年华为手机支持升级鸿蒙系统!...
- java weka命令行_使用自己的Java代码和模型获取WEKA中的预测百分比
- Bootloader的基本概念
- MFC apps must not include windows.h
- [YTU]_2781( 重复字符串)
- python 实例变量_Python的类变量和实例变量详解
- Linux SSH命令使用大全
- 删库了,我们一定要跑路吗?
- 在VMware Workstation中设置双网卡实现SSH使用固定IP登录并且在虚拟系统中任意访问Internet...
- 【Flink】Flink 多并行度下的 watermark触发机制
- 1. 变量和基本类型
- vue.js的学习中的简单案例
- 多线程读取视频及深度学习推理
- Android中加载SVGA格式图片
- Windows11 家庭版开启远程桌面解决方案之RDP Wrapper Library,小白全面攻略
- 诺基亚培育低端机市场 迂回战术威胁中华酷联
- 联想服务器配置 RAID
- 1、NVIDIA Quadro P600 Linux显卡驱动安装
- Ubuntu18.04 ifconfig命令找不到