[英]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.