| package com.zy.common.model; | 
|   | 
| import lombok.Data; | 
|   | 
| /** | 
|  * A*寻路算法Node节点 | 
|  */ | 
| @Data | 
| public class NavigateNode implements Comparable<NavigateNode>{ | 
|   | 
|     private int x;//坐标x | 
|     private int y;//坐标y | 
|     private int z;//坐标z(高度) | 
|     private int F;//综合花费的步数 | 
|     private int G;//已经花费的步数 | 
|     private int H;//将要花费的步数 | 
|     private NavigateNode Father;//父节点 | 
|     private Boolean isInflectionPoint;//是否为拐点 | 
|     private String direction;//行走方向 | 
|     private Integer moveDistance;//行走距离 | 
|   | 
|     public NavigateNode(int x, int y) { | 
|         this.x = x; | 
|         this.y = y; | 
|     } | 
|   | 
|     //通过结点的坐标和目标结点的坐标可以计算出F, G, H三个属性 | 
|     //需要传入这个节点的上一个节点和最终的结点 | 
|     public void init_node(NavigateNode father, NavigateNode end) { | 
|         this.Father = father; | 
|         if (this.Father != null) { | 
|             //走过的步数等于父节点走过的步数加一 | 
|             this.G = father.G + 1; | 
|         } else { //父节点为空代表它是第一个结点 | 
|             this.G = 0; | 
|         } | 
|   | 
|         //以下计算方案为算法原始方案,没有去拐点方案。已被Solution计算时自动覆盖。 | 
|         //计算通过现在的结点的位置和最终结点的位置计算H值(曼哈顿法:坐标分别取差值相加) | 
|         this.H = Math.abs(this.x - end.x) + Math.abs(this.y - end.y); | 
|         this.F = this.G + this.H; | 
|     } | 
|   | 
|     @Override | 
|     public int compareTo(NavigateNode o) { | 
|         return Integer.compare(this.F, o.F); | 
|     } | 
|   | 
| } |