2013-02-19 38 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中的其余项目将拥有该边缘的属性。