【数据结构】有向图、无向图以及最短路(Dijkstra)算法的C#实现(Template模式)

 为了写个“运筹学”的小工具,发现必须用到数据结构中的图。找了一圈没有找到自己满意的,只能自己写一个。

所有代码基于C#,完全模板实现。

 

首先是顶点的定义,顶点可以是任意类型,但其ID为Int32,该ID只是Graph内部使用。

 

然后是Edge的定义,这里有一个辅助的Struct:GraphEdgeCore,其负责真正的边的识别:

 

最大的难点来了:既然全部是模板,就不可避免会遇到权重的比较,因为是模板,所以必须定义一个额外的辅助类来实现

 

最后是图的定义:

其中,代表路径使用了另外一个类:

 

使用实例:

 

注意:对Dijkstra算法来说,其基本要求权重必须非负!根据上述代码可以轻易的实现对权重无要求的Floyd算法。

 

By Alva Chien.
2009.07.12

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值