图的基本介绍这里就不再赘述了,这里介绍怎样用代码实现图,毕竟可以有很多种方法表达一个图,这样的话,算法题中千奇百怪的表达方式会让我们头疼死了,下面介绍可以进行转化的模板。
啥也不说,直接上代码。
//图
public class Graph{
//点集,存入的是点的编号和对应的点的实际结构
public HashMap<Integer, Node> nodes;
//边集
public HashSet<Edge> edges;
public Graph(){
nodes = new HashMap<>();
edges = new HashSet<>();
}
}
//点
public class Node{
//自己的数据项,也就是点上的值,根据情况可能是String类型
public int value;
//这个点对应的入度
public int in;
//这个点对应的出度
public int out;
//这个点的邻接点(只管发散出去的方向,也就是只管出度方向链接的节点)
public ArrayList<Node> nexts;
//属于我的边有哪些(只指得是出度的边,入度到我这里的不算)
public ArrayList<Edge> edges;
public Node(int value){
//对于in和out,不直接赋值了,需要调用节点.in,节点.out赋值
this.value = value;
in = 0;
out = 0;
nexts = new ArrayList<>();
edges = new ArrayList<>();
}
}
//边
public class Edge{
//边上的权重,一般指的是距离的意思
public int weight;
public Node from;
public Node to;
public Edge(int weight, Node from, Node to){
this.weight = weight;
this.from = from;
this.to = to;
}
}