A 演算法介紹及其使用舉例

2021-08-20 13:40:09 字數 2261 閱讀 4541

1 a*演算法

a*演算法在人工智慧中是一種典型的啟發式搜尋演算法,啟發中的估價是用估價函式表示的:

其中f(n)是節點n的估價函式,g(n)表示實際狀態空間中從初始節點到n節點的實際代價,h(n)是從n到目標節點最佳路徑的估計代價。另外定義h'(n)為n到目標節點最佳路徑的實際值。如果h'(n)≥h(n)則如果存在從初始狀態走到目標狀態的最小代價的解,那麼用該估價函式搜尋的演算法就叫a*演算法。

2 第k最短路的演算法

我們設源點為s,終點為t,我們設狀態f(i)的g(i)為從s走到節點i的實際距離,h(i)為從節點i到t的最短距離,從而滿足a*演算法的要求,當第k次走到f(n-1)時表示此時的g(n-1)為第k最短路長度。c++**如下:()

cdoj找的一道例題:(模板題)這裡面用到spfa演算法(這是中國人創造的

time limit: 10000 ms     memory limit: 256 mb

submit status

6·1即將來臨,遊樂園推出了新的主題活動,雨過天晴,帆寶樂爺童心未泯,準備一**竟。

興奮的他們一入園便和孩子們打成一片,不知不覺便走散了。

當他們意識到的時候,只能通過手機來確認對方的位置。

他們當然想盡快找到對方,然而由於孩子們實在是太多,只能選擇距離稍遠的但是遊客稀少的路會合。

帆寶希望找到第kk短的路徑,這條路徑是他認為的幸運路徑。

帆寶迫切地想知道該條路徑的長度,而樂於助人的你也一定會幫助她的。

第一行三個整數n,m,kn,m,k,分別表示遊樂園的景點數目、景點之間的道路數目以及路徑長度從小到大排列時希望選擇的序號。

第二行兩個整數s,ts,t,分別表示帆寶樂爺所在景點的編號。

接下來mm行,每行三個整數u,v,wu,v,w,表示編號為uu和vv的景點之間有一條長度為ww的單向通路。

1≤n≤1000,0≤m≤100000,1≤k≤1000,1≤s,t,u,v≤n,1≤w≤1001≤n≤1000,0≤m≤100000,1≤k≤1000,1≤s,t,u,v≤n,1≤w≤100

第一行乙個整數xx,表示所選路徑的長度

無解輸出−1−1

sample input

sample output

3 3 2

1 21 2 2

1 3 4

3 2 1

5
題意:給你起點,終點以及要求的第k短路;

題解:首先將有向圖以終點t為起點,計算出t到每乙個邊的最短距離(到第i條邊dis[i]),

然後建立乙個優先佇列,從優先佇列中彈出f(p)最小的點p,如果p就是t,則t的次數加一。如果當前次數等於k則當前路即為地k小

的路,,否則,,便利每乙個p 所連的邊,將其擴張出的到p臨接點的資訊加入到優先佇列中;

ac**:

#include

#define inf 0x3f3f3f3f

using namespace std;

const int ax = 1e5+66;

const int maxn = 1e3+66;

int n,m,k;

int s,t;

int tot;

int retot;

struct edgeg[ax],rg[ax];

struct node

};int dis[maxn];

int head[maxn];

int rehead[ax];

int vis[maxn];

void add_edge(int u,int v,int c)

void spfa()

}}   

}int astar(node a)

}return -1;

}int main()

{tot=0;

retot=0;

memset(head,-1,sizeof head);

memset(rehead,-1,sizeof rehead);

scanf("%d%d%d",&n,&m,&k);

scanf("%d%d",&s,&t);

int x,y,w;

for(int i=0;i後面我還會更新出 關於啟發式搜尋的講解,以及dijkstra,,spfa,folyd這三種關於不同最短路問題講解及例題分析。

越努力,越幸運!    加油!!!

Lua中的原表介紹及其使用舉例

tostring a 字串輸出 當呼叫tostring obj 的時候,會先查詢obj的元方法中的 tostring,如果有就呼叫,沒有就會列印obj的記憶體位址。使用方法如下 luamodulenames luamodulenames setmetatable function regmodule...

函式覆蓋及其使用舉例

覆蓋是指派生類中如果存在重新定義的函式,其函式名 引數列 返回值型別必須同父類中的相對應被覆蓋的函式嚴格一致。覆蓋函式和被覆蓋函式只有函式體不同,當派生類物件呼叫子類中該同名函式時會自動呼叫子類中的覆蓋版本,而不是父類中的被覆蓋函式版本。覆蓋的特徵為在不同的範圍中 分別位於派生類與基類 的函式,函式...

THML介紹及其使用

html hyper text mark up language 是超文字標記語言,他是一種製作全球資訊網頁標準的語言。相當於定義統一的一套規則,一套標準,讓所有使用者遵守這一標準,這樣就可以讓瀏覽器根據標記語言的規則去解釋。瀏覽器負責將標籤翻譯成使用者看得懂的格式,呈現給使用者!html標籤 ht...