为了写个“运筹学”的小工具,发现必须用到数据结构中的图。找了一圈没有找到自己满意的,只能自己写一个。
所有代码基于C#,完全模板实现。
首先是顶点的定义,顶点可以是任意类型,但其ID为Int32,该ID只是Graph内部使用。
然后是Edge的定义,这里有一个辅助的Struct:GraphEdgeCore,其负责真正的边的识别:
最大的难点来了:既然全部是模板,就不可避免会遇到权重的比较,因为是模板,所以必须定义一个额外的辅助类来实现:
最后是图的定义:
其中,代表路径使用了另外一个类:
使用实例:
注意:对Dijkstra算法来说,其基本要求权重必须非负!根据上述代码可以轻易的实现对权重无要求的Floyd算法。
By Alva Chien.
2009.07.12