使用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*算法】相关推荐

  1. JAVA编写FCFS(先来先服务算法) 和 SJF(最短进程优先调度算法)

    核心代码如下: import java.util.ArrayList; import java.util.Scanner;public class opera {private static doub ...

  2. java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...

  3. java编写八皇后算法

    /*** 八皇后* @Author:yangle* @Date:2020/9/23* @version:1.0*/ public class test {public static int num = ...

  4. java实现种子填充算法,Java编写图形学的种子填充算法

    用C写的图形学填充算法已经很多了,看到不少帖子都是在问关于如何用Java编写图形学的填充算法,说来也巧,我刚好要做一个这个方面的实验,用的是扫描线种子填充算法,由于时间仓促,代码质量可能不算很高,希望 ...

  5. java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势

    java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...

  6. java牛客排序算法题_《剑指offer》面试题28:字符串的排列(牛客网版本) java...

    输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一个字符 ...

  7. java中的基本小程序_12个用Java编写基础小程序经典案例(收藏篇)

    原标题:12个用Java编写基础小程序&经典案例(收藏篇) 如果是刚接触或者刚学习java,练习一些基础的算法还是必须的,可以提升思维和语法的使用. 1.输出两个int数中的最大值 impor ...

  8. 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  9. 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

最新文章

  1. 解读生命密码的基本手段 ——DNA测序技术的前世今生
  2. 华为p4支持鸿蒙功能吗_吹过的牛都一步一步给实现了!明年华为手机支持升级鸿蒙系统!...
  3. java weka命令行_使用自己的Java代码和模型获取WEKA中的预测百分比
  4. Bootloader的基本概念
  5. MFC apps must not include windows.h
  6. [YTU]_2781( 重复字符串)
  7. python 实例变量_Python的类变量和实例变量详解
  8. Linux SSH命令使用大全
  9. 删库了,我们一定要跑路吗?
  10. 在VMware Workstation中设置双网卡实现SSH使用固定IP登录并且在虚拟系统中任意访问Internet...
  11. 【Flink】Flink 多并行度下的 watermark触发机制
  12. 1. 变量和基本类型
  13. vue.js的学习中的简单案例
  14. 多线程读取视频及深度学习推理
  15. Android中加载SVGA格式图片
  16. Windows11 家庭版开启远程桌面解决方案之RDP Wrapper Library,小白全面攻略
  17. 诺基亚培育低端机市场 迂回战术威胁中华酷联
  18. 联想服务器配置 RAID
  19. 1、NVIDIA Quadro P600 Linux显卡驱动安装
  20. Ubuntu18.04 ifconfig命令找不到

热门文章

  1. 业务直通式管理,你真的了解吗?
  2. 《转》Java Process应用之惑
  3. 分布式事务终极解决方案探讨
  4. Memcached 集群环境Java客户端
  5. CSS3中的 Background linear gradient()用法
  6. ASP.NET WebAPi之断点续传下载(中)
  7. 晚上,睡前只需1分钟,一觉到天亮!
  8. 贵阳市全国首部大数据立法《条例》5月起正式实施
  9. 常用插值算法介绍(二)
  10. 倒排索引统计与 Python 字典