poj 2449(A*求第K短路)
题目链接:http://poj.org/problem?id=2449
思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]<=h*[x](h*[x]定义为当前点到目标节点的实际距离),至于怎么求的h[x],即图中任何节点到目标节点的最短距离,这里我们可以建反图,以目标节点为源点一次spfa就可以求得各点到目标节点的最短距离了。然后就是A*求第k短路了,f[x]=g[x]+h[x],每次将最小的f[x]出队列,直到目标节点被扩展了k次,则求得了第k短路,这里还有一个优化,即如果某一个节点扩展次数大于k次,就没必要在继续扩展了。
http://paste.ubuntu.com/5917765/