題意:傳送門
原題目描述在最下面。
給你乙個有向圖,求指定節點間的第k短路。
先反向跑出從終點開始的到每個節點的最短距離。
樂觀估計函式f(
n)=g
(n)+
h′(n
) f(n
)=g(
n)+h
′(n)
。g(n)
g (n
)表示到當前狀態跑的距離,h′
(n) h′(
n)
表示到目標狀態還需要的距離。 對於a
∗ a
∗然後跑一遍bf
s bfs
就可以了。
ac**:
#include
#include
#include
#include
#include
#include
#include
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) (x)&(-(x))
#define all(x) (x).begin(),(x).end()
#define mk make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int n = (int)1e3 +107;
int n, m, k, st, ed;
int dis[n],vis[n],time[n];
struct lp
}aa,bb;
struct lhcw[100000+5],rev[100000+5];
int head[n],tot,headd[n],tum;
intq[2500005];
void add(int u,int v,int w)
void spfa()}}
}}int astar()
} return -1;
}int main()
scanf("%d
%d%d", &st, &ed, &k);
spfa();
if(st == ed)k++;
printf("%d\n", astar());
} return
0;}
原題目描述:
poj2449 A 演算法求解k短路
今天想到了以前早就遺留下來的乙個演算法 a 演算法,基本上,我對於a 只有過簡單的了解,卻從來沒有具體的寫過 a 於是就有了今天的a 學習。a 演算法相比與其他的搜尋來說,它多了乙個估價函式而已。而估價函式在不同的題目中形式又不同,這正是a 難的地方啊 對於此題 給出n個點,m條邊,可能又重邊,給定...
POJ 2449 A 初步 K短路
原以為a 會很難懂 結果狐狸大大一口氣就給我講懂了a 和k短路的求法.所謂a 就是啟發是搜尋.說白了就是給bfs搜尋乙個順序使得搜尋更加合理減少無謂的搜尋.如何來確定搜尋的順序?也就是用乙個值來表示這個值為f x 每次搜尋取f x 最小的拓展.那麼這個f x h x g x 其中這個h x 就是當前...
POJ 2449 A 演算法與最短路演算法
題目描述 給定乙個帶權有向圖,詢問從起點到終點第k短路徑長度,如果沒有則輸出 1。這個題目資料有特殊之處,就是如果起點與終點重合時,距離0並不算第一短最短路徑。a 演算法 使用估值函式來進行搜尋,f n g n h n 其中f n 表示狀態起點經過狀態n到狀態終點的估值,g n 為狀態起點到狀態n的...