Java版A星演算法

2021-06-02 13:49:11 字數 2216 閱讀 7618

a星演算法步驟:

1.起點先新增到開啟列表中

2.開啟列表中有節點的話,取出第乙個節點,即最小f值的節點

判斷此節點是否是目標點,是則找到了,跳出

根據此節點取得八個方向的節點,求出g,h,f值

判斷每個節點在地圖中是否能通過,不能通過則加入關閉列表中,跳出

判斷每個節點是否在關閉列表中,在則跳出

判斷每個節點是否在開啟列表中,在則更新g值,f值,還更新其父節點;不在則將其新增到開啟列表中,計算g值,h值,f值,新增其節點

3.把此節點從開啟列表中刪除,再新增到關閉列表中

4.把開啟列表中按照f值最小的節點進行排序,最小的f值在第乙個

5.重複2,3,4步驟

直到目標點在開啟列表中,即找到了;目標點不在開啟列表中,開啟列表為空,即沒找到

//a*演算法

public class astar

//查詢座標(-1:錯誤,0:沒找到,1:找到了)

public int search(int x1,int y1,int x2,int y2)

if(map[x1][y1]==0||map[x2][y2]==0)

node snode=new node(x1,y1,null);

node enode=new node(x2,y2,null);

openlist.add(snode);

listresultlist=search(snode, enode);

if(resultlist.size()==0)

for(node node:resultlist)

return 1; }

//查詢核心演算法

private listsearch(node snode,node enode)

//上if((node.gety()-1)>=0)

//下if((node.gety()+1)=0)

//右if((node.getx()+1)=0&&(node.gety()-1)>=0)

//左下

if((node.getx()-1)>=0&&(node.gety()+1)=0)

//右下

if((node.getx()+1)list,int x,int y)

resultlist.add(node); }

//計算g,h,f值

private void count(node node,node enode,int cost)

//計算g值

private void countg(node node,node enode,int cost)else

} //計算h值

private void counth(node node,node enode)

//計算f值

private void countf(node node) }

//節點類

class node

public int getx()

public void setx(int x)

public int gety()

public void sety(int y)

public node getparentnode()

public void setparentnode(node parentnode)

public int getg()

public void setg(int g)

public int geth()

public void seth(int h)

public int getf()

public void setf(int f)

}//節點比較類

class nodefcomparator implements comparator

}

測試類:

public class test ,,,

,,

};astar astar=new astar(map, 6, 10);

int flag=astar.search(4, 0, 3, 8);

if(flag==-1)else if(flag==0)elseelse if(map[x][y]==0)else if(map[x][y]==-1)

}system.out.println();

}} }

}

排序演算法 java 版

第一 選擇排序 外層迴圈從第i個位置開始尋找最小值與i 1位置的元素進行交換,最終達到有序狀態。有點遞迴的思想,每次都是在i length中尋找最小值放在i 1的位置 第一層for迴圈,從陣列的索引1處開始向後值陣列結束,尋找最小值。public int selectsortmethod int v...

查詢演算法Java版

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...

經典排序演算法(Java版)

1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...