主题:A星算法中节点传值问题?
以下是A*算法。有两个疑问:一、resultNode和nownode都为节点变量,
这行代码中resultNode=nownode,nownode只是终点一个节点值而已,
为什么可以循环判断取值呢? while(result.getParentnode()!=null){...}。
二、只根据一个终节点nownode怎么求得map[][]路径。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* A*寻路算法
* 地图中1表示可以通过,0表示不能通过
* 当结束点加到open队列中时查找结束
* gh值的设定问题。
*/
public classAstar {
// 地图
private int[][] map;
// 行
private int row;
// 列
private int colum;
// 水平或竖直方向的花费
private int COST_ZHI=10;
// 对角线方向的花费
private int COSR_XIE=14;
// open列表
private List<Node> open;
// close列表
private List<Node> close;
// 开始节点
private Node beginNode;
// 结束节点
private Node endNode;
// 结构节点
private Node resultNode=null;
/**
* 测试方法
* @param args
*/
public static void main(String[] args) {
int[][] map = new int[][] {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{1, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
{1, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
{1, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
{1, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
{1, 1, 1, 1, 0, 1, 1, 1, 1, 1 }
};
Astarastar=newAstar(map, 6, 10);
astar.search(0,0, 5, 9);
Node result=astar.getResultNode();
while(result.getParentnode()!=null){
map[result.getX()][result.getY()]=2;
result=result.getParentnode();
}
map[result.getX()][result.getY()]=2;
for (int i = 0; i <6; i++) {
for (int j = 0; j < 10; j++){
System.out.print(" "+map[j]);
}
System.out.println();
}
}
/**
* 初始化地图长宽还有open跟close队列
* @param map
* @param row
* @param colum
*/
public Astar(int[][] map,int row,int colum){
this.map=map;
this.row=row;
this.colum=colum;
open=new ArrayList<Node>();
close=new ArrayList<Node>();
}
/**
* 开始节点的坐标跟终点节点的坐标
* @param x1
* @param y1
* @param x2
* @param y2
*/
public void search(int x1,int y1,int x2,int y2) {
// 如果在节点外直接返回
if (x1<0||x1>=row||y1<0||y1>colum||x2<0||x2>=row||y2<0||y2>colum) {
return;
}
// 如果无法通过直接返回
if (map[x1][y1]==0||map[x2][y2]==0) {
return;
}
beginNode=new Node(x1, y1, null);
endNode=new Node(x2, y2, null);
// 开始按方向搜索
searchnode(beginNode, endNode);
}