簡體   English   中英

實現圖-Java

[英]Implementing Graph - Java

該程序的目標是在不使用任何庫的情況下在JAVA中實現圖形。 這不是家庭作業,只是一些練習。 我正在嘗試實現單向加權圖,以后可以將其作為參數傳遞給Kruskal或Prim的算法,以實現最小生成樹。 由於我是數據結構的新手,因此我很難確定如何實現圖形。 鄰接矩陣/列表是我要避免的事情,我可以采用以下方法繼續進行嗎:

/**
 * Graph.java: This is the main file.
 */ 
public class Graph {

    public static void main(String[] args)
    {
        Node n1 = new Node("A");
        Node n2 = new Node("B");
        Node n3 = new Node("C");
        Node n4 = new Node("D");
        Node n5 = new Node("E");
        Node n6 = new Node("F");

        Edges e1 = new Edges(n1, n2, 5);
        Edges e2 = new Edges(n1, n3, 3);
        Edges e3 = new Edges(n2, n4, 5);
        Edges e4 = new Edges(n2, n5, 2);
        Edges e5 = new Edges(n3, n6, 7);
    }
}


/**
 * Node.java class used to represent vertices
 */
public class Node {
    private String name;
    public Node(String name)
    {
        this.name = name;
    }
}

/**
 * Edges.java class used to represent edges.
 */
public class Edges {
    private int weight;
    private Node sNode;
    private Node dNode;
    public Edges(Node sNode, Node dNode, int weight)
    {
        this.sNode = sNode;
        this.dNode = dNode;
        this.weight = weight;
    }
}

就我個人而言,我會將邊緣附加到節點上。 我意識到它使邊緣的數量增加了一倍(因為它們在您的情況下是雙向的),但是它使遍歷節點的速度大大提高,因為您不必遍歷邊緣即可找到下一步可以去的地方。 我知道您提到您對鄰接表不感興趣,但是就性能而言,在大多數情況下,這似乎是一種更好的方法,盡管我確信您有理由。 所以無論如何我都會發布代碼,以便其他人可以找到它。

(沒有獲取/設置目的是為了使代碼簡潔)

public class Node {
    private String name;
    private List<Edge> neighbors;

    public Node(String name) {
        this.name = name;
    }

    public void AddUndirectedEdge(Node destination, int weight) {
        neighbors.Add(new Edge(destination, weight));
        destination.neighbors.Add(new Edge(this, weight));
    }

    private static class Edge {
        public Node destination;
        public int weight;

        public Edge(Node destination, int weight) {
            this.destination = destination;
            this.weight = weight;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM