2013-02-19 41 views
1

我將Graph(在我的Graph類中)存儲爲: Dictionary< Vertex<T>, List<Vertex<T>> _edges鄰接列表圖實現 - 可重用類

我應該如何存儲邊緣的重量,顏色等屬性? (例如爲WeightedGraphs,ColoredGraphs等)創建通用Graph類我想添加IGraph接口(它將包含像Traverse,InsertEdge等通用圖形操作)作爲Graph類中的屬性。

但是我不知道如何處理邊緣屬性。如果我實現IGraph接口爲ColoredGraph我想要有顏色屬性的頂點,爲IGraph實現爲WeightedGraph我想擁有重量屬性等。我也想聽聽你如何實現Graph作爲鄰接列表。

PS:這不是學校功課

回答

1

Edge ={2 Vertices = {Adjacent Vertices per a vertex}, weighted value, color value, etc}

然後

public Vertex 
{ 
//get adjacent list of vertices 
} 
public class Edge 
{ 
//define necesary values 
//define pair of vertices to make an edge 
} 
+0

我曾經想過Edge類,但是當我定義重量,顏色等時,某些值在某些情況下可能未被使用(是不是「代碼設計失敗」?)是否有其他方法來實現它? – fex 2013-02-19 21:57:14

+0

@fex不是真的,如果有這種情況下,你可以預見,然後讓他們的getter和setter多態,你couold想想IGraph,也可以有IVertex,IEdge儘可能多,所有這些只是爲了讓你的課程脫鉤。 – 2013-02-19 22:24:11

0

您可以通過利用Tuple<>爲圖的頂點實現這一點。 Tuple<>將允許您存儲邊緣的各種屬性。

曲線圖的簽名可以被定義爲:

Dictionary< Vertex<T>, List<Tuple<T, T>> _edges. 

的第一項在Tuple指示用於所述邊緣的目的地節點。 Tuple中的其餘項目將擁有該邊緣的屬性。