poj 2449 k短路(A*+spfa)
题目:就是求给出的两点之间的第k短的路,没有的话就输出-1 A*算法其实就是在搜索的时候有一个方向,计算出最可能是答案的解 /* F(p)=g(p)+h(p) g(p)为当前从s到p所走的长度,h(p)为从p到 t 的最短路的长度, 则F(p)的意义就是从s按照当前路径走到 p 后要走到终点 t 一共至少要走多远*/ #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; const int maxx = 100010; const int inf = 0x3f3f3f3f; struct node { int f,g,v; }; bool operator < (node a,node b) { if(a.f==b.f)return a.g>b.g; return a.f>b.f; } struct edge { int v,next,w; }e1[maxx],e2[maxx]; int head1[maxx],head2[maxx],num=0; int n,m,s,t,k; int vis[1010],dis[1010]; void add(int u,int v,int w) { e1[++num].v=v;e1[num].w=w; e1[num]