資源簡介
A*源碼免費開放,內(nèi)涵main函數(shù)可執(zhí)行測試之用。
沈陽-亞冰

代碼片段和文件信息
package?com.liuybc.astar;
import?java.util.ArrayList;
import?java.util.HashMap;?
import?java.util.List;
import?java.util.Map;?
public?class?AStarMap?{
private?List?openList?=?new?ArrayList();
private?Map?closeMap?=?new?HashMap();
//?private?Set?closeSet?=?new?HashSet();
private?boolean?isFind?=?false;
private?List?path?=?new?ArrayList();
/**?障礙物?*/
public?static?final?int?STATE_BARRIER?=?2;
AStarNode?target;
AStarNode?source;
int[][]?astarData;
public?AStarMap(int?xGridNum?int?yGridNum)?{
astarData?=?new?int[yGridNum][xGridNum];
source?=?new?AStarNode(0?0);
target?=?new?AStarNode(xGridNum?-?1?yGridNum?-?1);
}
private?int[][]data;
public?int[][]?getData()?{
return?data;
}
public?void?setData(int[][]?data)?{
this.data?=?data;
}
// public?static?void?main(String[]?args)?{
// AStarMap?asm?=?new?AStarMap(100?200);
// //?int[][]data=?{
// //?{00000}{00000}{00100}{00000}{00000}
// //?{00000}{00000}{00100}{00000}{00000}
// //?{00000}{00000}{00100}{00000}{00000}
// //?{00000}{00100}{00100}{00000}{00000}
// //?{00000}{00000}{00000}{00000}{00000}
// //?};
//
// asm.loadData(data?1?-1);
// List?list1?=?asm.find();
//
// for?(int?i?=?0;?i?// AStarNode?asn?=?(AStarNode)?list1.get(i);
// System.out.println(asn.getX()?+?“??????????“?+?asn.getY());
// }
// asm.toString();
// List?list?=?asm.getOpenList();
// for?(int?i?=?0;?i?// AStarNode?asn?=?(AStarNode)?list.get(i);
// System.out.println(asn.getX()?+?“??????????“?+?asn.getY()
// +?“?======?“?+?asn.getFather().getX()?+?“?????????“
// +?asn.getFather().getY());
// }
//
// }
public?AStarNode?getTarget()?{
return?target;
}
public?AStarNode?getSource()?{
return?source;
}
public?int[][]?getAStarData()?{
return?astarData;
}
/**
?*?搜索算法
?*/
public?List?find()?{
init();
AStarNode?current?=?null;
while?(!isEnd()?&&?!isFind())?{
current?=?getMinFNodeFromOpenList();
if?(isAchieve(current))?{?//?是否以及找到目標(biāo)
buildPath(current);
isFind?=?true;
}?else?{
add2CloseMap(current);
for?(AStarNode?neighbor?:?getNeighbor(current))?{
if?(neighbor?==?null?||?isInCloseMap(neighbor)?||?/*
?*?如果已經(jīng)在關(guān)閉列表中,
?*?那么跳過
?*/
isCanNotGo(current?neighbor))
continue;
boolean?isBetter?=?true;
AStarNode?nodeFromOpenList?=?getNodeFromOpenList(neighbor);
if?(nodeFromOpenList?!=?null)?{?//?如果在開啟列表中
neighbor?=?nodeFromOpenList;
int?tg?=?neighbor.distinctG(current);
isBetter?=?tg?>?neighbor.getG()???false?:?true;
}?else?{
add2OpenList(neighbor);
}
if?(isBetter)?{
neighbor.reCalculatorGAndH(current?target);
}
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-09-13?15:58??astar\
?????文件????????8592??2012-09-13?16:00??astar\AStarMap.java
?????文件????????3272??2012-09-12?14:37??astar\AStarNode.java
評論
共有 條評論