if(Arrays.binarySearch(isPass,map[fy][fx]) = 0) { Node node2 = new Node(fx, fy); node2.parent = node; node2.G = node.G + 10; //采用manhattan启发算法 两点中的直角 距离 node2.H = Math.abs((ex-fx+ey-fy)
if(Arrays.binarySearch(isPass,map[fy][fx]) >= 0) {
Node node2 = new Node(fx, fy);
node2.parent = node;
node2.G = node.G + 10;
//采用manhattan启发算法 两点中的直角 距离
node2.H = Math.abs((ex-fx+ey-fy)*10);
node2.F = node2.G + node2.H;
OpenList.add(node2);
}
}
if(flag==false)
{
break;
}
if(OpenList.size()==0)
{
return null;
}
node = MinF(OpenList);
OpenList.remove(node);
CloseList.add(node);
}
ArrayList Path = new ArrayList();
node = end;
while(node.parent!=null)
{
Path.add(node);
node = node.parent;
}
return Path;
}
public Node MinF(List list)
{
Node min= list.get(0);
for(int i = 0; i
{
if(list.get(i).F<=min.F)
{
min = list.get(i);
}
}
return min;
}
public boolean containOpen(int x,int y)
{
for(Node node : OpenList)
{
if(node.equals(x,y))
{
return true;
}
}
return false;
}
public Node getOpen(int x,int y)
{
for(Node node : OpenList)
{
if(node.equals(x,y))
{
return node;
}
}
return null;
}
public boolean containClose(int x,int y)
{
for(Node node : CloseList)
{
if(node.equals(x,y))
{
return true;
}
}
return false;
}
}