思路:用的是第k短路算法 A* 具体详解看前一篇 poj 2449 这里就不注释了,都差不多的
//2604K
282MS
#include <stdio.h>
#include <string.h>
#include <queue>
#define EM 100010
#define VM 5050
const int inf = 0x3f3f3f3f;
using namespace std;
int src,des,n,e;
int head[VM],dis[VM];
struct E
{
to,w,nxt;
} edge[2*EM];
struct data
{
to,g,h;
operator < (data a) const
return a.g + a.h < g + h;
};
void addedge (int cu,int cv,int cw)
{
cv;
cw;
= head[cu];
++;
}
void dij ()
{
i,j,k;
vis[VM];
(vis,false,sizeof(vis));
(dis,0x3f,sizeof(dis));
0;
i <= n; i ++)
int min = inf;
for (j = 1; j <= n; j ++)
if (!vis[j]&&dis[j]
< min)
{
min = dis[j];
k = j;
}
vis[k] = true;
for (int u = head[k]; u != -1; u = edge[u].nxt)
{
int v = edge[u].to;
if (!vis[v]&&dis[v]
> dis[k] + edge[u].w)
dis[v] = dis[k] + edge[u].w;
}
}
int Astar ()
{
cnt[VM];
cur,nxt;
priority_queue <data> node;
(cnt,0,sizeof (cnt));
src;
0;
dis[src];
(cur);
(!node.empty ())
cur = node.top ();
node.pop ();