簡體   English   中英

Java Graph實施幫助

[英]Help with Java Graph Implementation

我必須編寫一個程序將頂點存儲到圖中並連接它們。 該程序的輸入為:

Plot 3 5 to 5 8
Plot 6 1 to 3 5
etc

通過此輸入,我將存儲(3,5)的頂點,分別是xy坐標。 然后,我將不得不將此坐標連接到(5,8)

我的問題是,我將如何實施該圖? 我以為我需要將頂點存儲在arraylist或map中,並將邊緣也保留在列表中...但是由於我沒有得到圖形的實際最大尺寸,所以我有點迷失了在整體實施中。 基本上,如果你們能給我一個如何啟動它的想法,那會很不錯。

考慮圖形的一種簡單方法是將它們分解為節點和邊緣組件。 (注意:您所說的頂點我稱為節點。足夠接近。)

讓我們考慮以下選項:

// Option 1
class Node<V> {
    V data;
    Set<Node<V>> edges;
    // if it were a directed graph, you'd need:
    // Set<Node<V>> edgesAway;
}

// Option 2
class Node<V> {
    V data;
    Set<Edge<V>> edges;
    // if it were a directed graph, you'd need:
    // Set<Edge<V>> edgesAway;
}

class Edge<V> {
    Node<V> source;
    Node<V> destination;
}

現在,圖表無非是:

// option 1
class Graph<V> {
    Set<Node<V>> nodes;
}

// option 2
class Graph<V> {
    Set<Node<V>> nodes;
    Set<Edge<V>> edges;
}

選項1是最簡單,最容易實現的。 選項2為您提供了更多的靈活性,例如為邊緣值添加權重。

現在,您在這些節點上有一些數據,對嗎? 現在,讓我們將數據作為坐標的字符串表示形式。

class SomeObject {
    String data;
    int x;
    int y;

    public boolean equals(Object o) {
        if(o instanceof SomeObject) {
            SomeObject so = (SomeObject)o;
            return so.x == x && so.y == y;
        }
        return false;
    }

    public int hashCode() {
        return x * 100 + y; // it works... close enough :)
    }
}

// somewhere later:
Graph<SomeObject> graph = ...

現在,您需要什么功能,您需要一個更完整的列表。 但這應該可以幫助您更好地理解如何實現圖形。

您可以使用像JDSL這樣已經制作好的

暫無
暫無

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

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