Java室内最短路径搜索(支持多楼层)
修改了上次的代码,现在支持室内的多楼层情况下的最短路径搜索,还是使用A*算法,把在GraphAdjList中VNode没有利用起来的data字段作为我们存储楼层属性的位置。 实际上是我偷懒了,正常情况下VNode里应该再加一个int level属性,而data还是作为绑定用户想添加任意类型的数据的一个位置来使用,这样例如当用户想对任意节点添加String类型的描述时,声明GraphAdjList<String>即可,但现在我们的GraphAdjList只能声明为GraphAdjList<Integer>,因为我们把data作为楼层属性来使用,名存实亡的模板类hh。 用户添加节点时使用GraphAdjList.insertVex(E v,int index,int x,int y),v 楼层,index 节点的唯一序列号(从1开始,符合生活习惯),x,y是点坐标,添加边的操作与上次不变。 需要注意的是,在我们的A*代码中,f=g+h,启发函数h设置的可能不是很理想,我们仍旧沿用了x,y的曼哈顿距离,未考虑楼梯口位置和层数等因素的影响,如果遇到起点终点都在所属层的中心位置,楼梯电梯在每层的边缘,搜索方向会先往中心扩展,直到没有结果时,才会往边缘扩展,随后扩展到楼上或楼下,在这种情况下效率可能不佳,但仍旧能获得最短路径。简而言之,就是在我们现在设计的h下