Java数据结构--图

Java数据结构--图_第1张图片

如上所示,是一个图结构。图结构主要包含两个部分,点 和 线。其中线可以根据是否有方向分为两种,图中的线如果有方向可以成为有向图,如果没有可以看成无向图,无向图可以看成特殊的双向有向图。线还有可能包含权重(或者称为距离)这个属性。

如何用代码的方式表达图呢,万事万物皆对象,如下所示:

//表示边
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;
    }
}


//

//表示节点
public class Node {
    public int value;   //当前点的值
    public int in;  // 入度多少个线指向我
    public int out;  //出度   我向外发散了多少个线
    public ArrayList next;   //从我直接发散出去 与我直接连接的点的集合
    public ArrayList edges;   //从我直接发散出去的边

    public Node(int value) {
        this.value = value;
        this.in = 0;
        this.out = 0;
        this.next = new ArrayList<>();
        this.edges = new ArrayList<>();
    }
}

//

public class Graph {
    //图就是点和边构成的集合
    public HashMap nodes;
    public HashSet edges;

    public Graph() {
        nodes=new HashMap<>();
        edges=new HashSet<>();
    }
}

我们常用个二维数组来表示图内的信息,没一行表示两点和一条线的信息,多维数组构成了整个图。

[权重,出发点,到达点].......

代码如下:

public class GraphGenerator {
    //matrix所有的边
    //N*3的矩阵
    //[权重,出发点的值/编号,到达点的值/编号]
    public static Graph createGreaph(Integer[][] matrix){
        Graph graph=new Graph();

        for (int a=0;a

 

 

你可能感兴趣的:(Java数据结构--图)