zoukankan      html  css  js  c++  java
  • A*寻路算法,通过选取节点的优化减少节点访问数量

    // 通过优化节点选取,减少节点访问数量 // 额外的思考:只要节点的f最小就直接拿来做当前节点这里可以做个优化。如果多个节点的f值相同,哪个节点的g最大,优先用来做当前节点。因为f相同,g越大,h越小,此节点距离目标更近些。 //好比两条路到目的地的距离相同,但我在其中一条已经走了一大半了,当然选择已经走了一段的路继续走。更早到达目的地的概率大些。 private static Grid findMinGird(ArrayList<Grid> openList) { //优化后的选取,根据生活经验,在f最小的的节点中,应该选择g更大的。 List<Grid> minFGrids = new ArrayList<Grid>(); Grid tempGrid = openList.get(0); minFGrids.add(tempGrid); for (Grid grid : openList) { if (grid.f < tempGrid.f) { tempGrid = grid; minFGrids.clear(); minFGrids.add(grid); } if (grid.f == tempGrid.f && grid != tempGrid) { minFGrids.add(grid); } } Grid[] array = minFGrids.stream().sorted(new Comparator<Grid>() { @Override public int compare(Grid o1, Grid o2) { return o2.g - o1.g; } }).toArray(Grid[]::new); return array[0]; //优化前,只是找一个f最小的 // Grid tempGrid = openList.get(0); // for (Grid grid : openList) { // if (grid.f < tempGrid.f) { // tempGrid = grid; // } // } // return tempGrid; }

  • 相关阅读:
    封装Socket.BeginReceive/EndReceive以支持Timeout
    使用反射动态创建类型实例
    泛型List<T>排序(利用反射)
    复旦版最佳医院排行 沪21家医院入选全国百佳
    C#格式化字符串
    一些很酷的.Net技巧
    系列文章--SQLite文章
    C#垃圾回收机制
    C#中Cache的使用
    ASP.NET Cache缓存的使用
  • 原文地址:https://www.cnblogs.com/wllhq/p/14782156.html
Copyright © 2011-2022 走看看