在一个有向图中,如何求出前k短路,比较高效的算法我们自然想到了A*算法,这里赋上代码,所有讲解将放在代码注释中:
如对A*有基础性知识的疑问,请参考此文:A*搜索算法
import java.io.File;
import java.io.IOException;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.HashMap;
class Node {//定义节点,其实就是边,v为当前点编号,c为边权值,next为与此边相连的另一个点的序号
int v, c, next;
public Node() {
}
}
class Statement {
int v, g, h;
public Statement() {
}
}
public class AstarDemo {
static int head[] = new int[1005];
static int tail[] = new int[1005];
static int h[] = new int[1005];
static Node[] Edge = new Node[1005];
static HashMap<Integer, Integer> path = new HashMap<Integer, Integer>();
/*
* HashMap 记录路径的bug在于如果某个节点有多个父节点