這裡原理就是根據乙個g(到起始點的真實路徑)、h(到目標點的真估計數值),用這個來衡量路徑的好壞,這樣找乙個合適的h函式就是個問題,而且在執行時,套路是這樣的,乙個open表,乙個close表,open用來存遍歷了卻還沒有真正訪問的點,close用來存訪問過的點,每次都選open表中f函式最小的節點,拿出來訪問,在遍歷其周圍的節點,把它再存到open表中,再迴圈直到找到終點為止。
我的a* 演算法,跑一些複雜地圖時,可能就會有bug,路徑有可能會不是最短,也可能會有斷點,也就是貼出來留個紀念,但是跑一般的圖時,不會有事。
#include#include#include#include#define red "\033[31m" /*red*/
#define yellow "\033[33m" /*green*/
#define reset "\033[0m"
using namespace std;
typedef struct node
node(int x,int y,node* father)
}node;
int weightw=10;//直線代價
int weightwh=14;//對角線代價
int row=20;//行
int col=20;//列
class a_star
;void printmap();
int map[100][100]= //地圖(純手打)
, ,,,
,,,,
,,,,
,,,,
,,,,
,};a_star::a_star()
a_star::~a_star()
void a_star::search(node* start,node* end)
void a_star::check(int x,int y,node* father,int g)//用來訪問節點
}else//如果兩個表都不在就計算一下f值,存到open表中
}int a_star::finding(vector* nodelist,int x,int y)
}return j;
}bool a_star::compare(node* n1,node* n2)
void a_star::print(node* current)//將路徑制為7
}void printmap()//輸出地圖
最短路徑演算法 最短路
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...
最短路徑演算法
floyd演算法 012345 001 54 1108 1 2 801 3 3 1035 45 302 5413520 floyd 演算法過程描述如下 首先 以邊集 初始化,得到所有的直接連通代價 依次考慮第 k個結點,對於 中的每乙個 i j 判斷是否滿足 s i j s i k s k j 如果...
最短路徑演算法
個人覺得下面 有代表性 最短路徑演算法原始碼 vb 本人載 開發gis,遊自編的最短路徑查詢程式,速度特快,3萬節點,35000條路全部遍歷,只需1秒。現將最短路徑的思路告訴大家,希望大家在優化,並用不同語言編制,我正在學delphi,準備用delphi做成庫,本例以由拓撲關係的arc info 檔...