A*算法
第k短路,很明显就是第k次到达终点第最短路经。
详情可参考: https://oi-wiki.org/graph/kth-path/
例题:http://poj.org/problem?id=2449
#include"stdio.h"
#include"string.h"
#include"queue"
#include"algorithm"
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
typedef pair<ll,int> PII;
const int maxn = 1000 + 7;
struct Edge{ ///正向边
int to,next;
ll weight;
}edge[maxn * 100];
struct Re_Edge{ ///反向边
int to,next;
ll weight;
}re_edge[maxn * 100];
int n,m,s,e,tot,k,head[maxn],re_head[maxn],tot2;
bool vis[maxn];
ll dist[maxn];
void addEdge(int a,int b,ll c){ ///正向加边
edge[++ tot].to = b; edge[tot].next = head[a];
edge[tot].weight = c; head[a] = tot;
}
void add_Redge(int a,int b,ll c){ /// 反向加边
re_edge[++ tot2].to = b; re_edge[tot2].next = re_head[a];
re_edge[tot2].weight = c; re_head[a] = tot2;
}
struct Node{