知识大全 使用Java编写的B*算法

Posted

篇首语:家资是何物,积帙列梁梠。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用Java编写的B*算法相关的知识,希望对你有一定的参考价值。

使用Java编写的B*算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  使用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 = ;

  while(!openList isEmpty() || !leftList isEmpty() || !rightList isEmpty())

  count ++;

  if(count> )

  break;

  Iterator<Point> it = erator();

  if(it hasNext())

  Point p = it next();

  it remove();

  if(sideNext(p end canPenetrate))break;

  

  it = erator();

  if(it hasNext())

  Point p = it next();

  it remove();

  if(sideNext(p end canPenetrate))break;

  

  it = erator();

  if(it hasNext())

  Point p = it next();

  it remove();

  if(sideNext(p end canPenetrate))break;

  

  

  final ArrayList<int[]> list = new ArrayList<int[]>();

  while(end parent!=null)

  list add( new int[]end x end y);

  end = end parent;

  

  return list;

  

  /**

  *

  * @param p

  * @param end 目标点

  * @param side direct right left

  * @param canPenetrate 可否穿透

  */

  protected boolean sideNext(Point p Point end int side boolean canPenetrate)

  int dir = Point getDirSimple(p end);

  Point nextp = null;

  if(ntains(p))

  nextp = nextPassPointSide(p end canPenetrate);

  if(nextp != null)

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(ntains(nextp))

  //                  return sideNext(nextp end side canPenetrate);

  return false;

  else if(!ntains(nextp))

  addToSearch(p nextp this rightList);

  

  nextp = nextPassPointSide(p end canPenetrate);

  if(nextp != null)

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(ntains(nextp))

  //                  return sideNext(nextp end side canPenetrate);

  return false;

  else if(!ntains(nextp))

  addToSearch(p nextp this leftList);

  

  return false;

  

  this closeList add(p);

  if(side == )

  if(p canWalkDir(dir canPenetrate))//下一个点可以走

  nextp = p getPassPointByDir(dir);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(!ntains(nextp))

  addToSearch(p nextp this openList);

  

  

  else//不可走 就分支出两个围绕探索点

  

  nextp = nextPassPointSide(p end canPenetrate);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(nextp != null)

  if(ntains(nextp))

  return sideNext(nextp end side canPenetrate);

  //                      return false;

  else if(!ntains(nextp))

  addToSearch(p nextp this rightList);

  

  nextp = nextPassPointSide(p end canPenetrate);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(nextp != null)

  if(ntains(nextp))

  return sideNext(nextp end side canPenetrate);

  //                      return false;

  else if(!ntains(nextp))

  addToSearch(p nextp this leftList);

  

  

  

  else if(side> )

  nextp = p getPassPointByDir(dir);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(nextp != null && !ntains(nextp))

  addToSearch(p nextp this openList);

  

  else

  

  nextp = nextPassPointSide(p end canPenetrate);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(nextp != null && !ntains(nextp) && !ntains(nextp))

  addToSearch(p nextp this leftList);

  

  

  

  else if(side< )

  nextp = p getPassPointByDir(dir);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(nextp != null && !ntains(nextp))

  addToSearch(p nextp this openList);

  

  else

  

  nextp = nextPassPointSide(p end canPenetrate);

  if(nextp == end)

  nextp parent = p;

  return true;

  

  if(nextp != null && !ntains(nextp) && !ntains(nextp))

  addToSearch(p nextp this rightList);

  

  

  

  return false;

  

  protected void addToSearch(Point parent Point next HashSet<Point> list)

  next clear();

  next parent = parent;

  list add(next);

  

  /**

  *

  * @param p

  * @param side > 或者 <

  * @param canPenetrate

  * @return

  */

  protected Point nextPassPointSide(Point p Point end int side boolean canPenetrate)

  int dir = Point getDirSimple(p end);

  Point nextp = null;

  if(side< )

  while(side>= )

  dir = Point rightdir(dir);

  if(p canWalkDir(dir canPenetrate))

  nextp = p getPassPointByDir(dir);

  if(!ntains(nextp))

  break;

  

  

  side ;

  

  

  else

  

  while(side<= )

  dir = Point leftdir(dir);

  if(p canWalkDir(dir canPenetrate))

  nextp = p getPassPointByDir(dir);

  if(!ntains(nextp))

  break;

  

  

  side++;

  

  

  return nextp;

  

cha138/Article/program/Java/hx/201311/26927

相关参考

知识大全 使用 Java 编写 B/S 网络通信程序

使用Java编写B/S网络通信程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    网络上的系

知识大全 使用Java编写B/S网络通信程序

使用Java编写B/S网络通信程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!网络上的系统结构多

知识大全 Java进阶:Java编写通过代理访问的应用程序

Java进阶:Java编写通过代理访问的应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 JAVA代码编写的30条建议

JAVA代码编写的30条建议  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()类名首字母应该大

知识大全 自己编写的Java数组操作工具

自己编写的Java数组操作工具  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  看到网上的一段关于

知识大全 跨平台编写Java程序注意事项

Java进阶:跨平台编写Java程序注意事项  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用

知识大全 用Java 编写手机应用程序

时尚:用Java编写手机应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不知从什么时候开

知识大全 数据结构与算法线性表复习习题5[2]

      要求同题试对单链表编写求C的算法  解  //将AB求交后的结果放在C表中并删除B表  StatusListCross_L(Li

知识大全 编写Java无脚本的JSP页面

编写Java无脚本的JSP页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java语言深入:编写高级JScript代码

Java语言深入:编写高级JScript代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  创建