有向网络类
有向网络类在 cimnet/_base_net.h
内定义,类的声明如下:
-
template<class _NId, class _NData, class _EData>
class DirectedNetwork -
该类包含以下类型定义:
-
typedef DirectedNetwork<_NId, _NData, _EData> _DiNetType;
类型匹配的有向网络类型。
DirectedNetwork
包含以下构造器:-
DirectedNetwork()
构造空的有向网络。
-
DirectedNetwork(const _DiNetType &net)
有向拷贝构造器,根据有向网络构造有向网络。
- 参数
net – 被拷贝的有向网络
-
DirectedNetwork(const _NetType &net)
无向拷贝构造器,根据无向网络构造有向网络。
- 参数
net – 被拷贝的无向网络,每条无向边都能产生有向网络中的一对双向连边,即新增两条边。
-
~DirectedNetwork()
析构函数,释放空间。
-
friend std::ostream &operator<<(std::ostream &out, const DirectedNetwork &net)
通过输出流输出网络规模信息。对于空网络它会输出:
DirectedNetwork {#(node)=0, #(edge)=0, #(degree)=0}
-
_NId add_node(const _NId &id, const _NData &node_data)
向网络中添加一个节点及相应的节点数据。如果这个节点已存在,则用新的节点数据覆盖原有节点数据。
-
void add_edge(const _NId &id1, const _NId &id2, const _EData &edge_data)
向网络中添加一条由节点
id1
指向节点id2
的连边及相应的边数据。如果这条边已存在,则用新的边数据覆盖原有边数据。如果该边的起始或终止节点不存在,则自动使用add_node
函数创建这个点,并用_NData
构造节点数据。- 参数
id1 – 待加入边的起始节点编号
id2 – 待加入边的终止节点编号
edge_data – 待加入边的边数据,如果未给定则使用
_EData
类型的默认构造器构造对象赋值。
-
void remove_edge(const _NId &id1, const _NId &id2)
从网络中移除一条由节点
id1
指向节点id2
的连边,相应边的边数据也会被清除。- 参数
id1 – 待删除边的起始节点编号
id2 – 待删除边的终止节点编号
- 抛出
NoNodeException – 节点
id1
或id2
不存在NoEdgeException – 待删除有向边不存在
-
void remove_node(const _NId &id)
从网络中移除节点,并移除所有与其前序节点和后继节点的连边,存储在上面的数据也会被清除。
- 参数
id – 待加入的节点编号
- 抛出
NoNodeException – 节点
id
不存在
-
bool has_node(const _NId &id) const
判断网络中是否存在指定节点。
- 参数
id – 待判断的节点编号
- 返回
如果网络中存在节点
id
,返回 true ,否则返回 false 。
-
bool has_edge(const _NId &id1, const _NId &id2) const
同
has_successor
方法。
-
_NData &node(const _NId &id)
访问节点数据,可以读写。
- 参数
id – 节点编号
- 返回
节点
id
上的节点数据对象的引用- 抛出
NoNodeException – 节点
id
不存在
-
_NData get_node_data(const _NId &id) const
访问点数据的一份拷贝,修改该函数返回的变量不会改变
DirectedNetwork
对象存储的点数据。- 参数
id – 节点编号
- 返回
节点
id
上的节点数据对象的拷贝- 抛出
NoNodeException – 节点
id
不存在
-
_EData &edge(const _NId &id1, const _NId &id2)
访问有向边数据,可以读写。
- 参数
id1 – 边上的起始节点编号
id2 – 边上的终止节点编号
- 返回
- 抛出
NoNodeException – 节点
id1
或id2
不存在NoEdgeException – 由节点
id1
指向节点id2
的有向边不存在
-
_EData get_edge_data(const _NId &id1, const _NId &id2) const
访问边数据的一份拷贝,修改该函数返回的变量不会改变
DirectedNetwork
对象存储的边数据。- 参数
id1 – 边上的起始节点编号
id2 – 边上的终止节点编号
- 返回
- 抛出
NoNodeException – 节点
id1
或id2
不存在NoEdgeException – 由节点
id1
指向节点id2
的有向边不存在
-
int number_of_nodes() const
获取节点的总数。
- 返回
网络中所有节点的数目
-
int number_of_edges() const
获取边的总数。
- 返回
网络中所有有向边的数目
-
int total_degree() const
获取各节点的度之和,它的值为边数 number_of_edges() 的两倍。
- 返回
网络的总度数
-
int out_degree(const _NId &id) const
获取节点的出度,即该节点指向其他节点的边的数量。
- 参数
id – 节点编号
- 返回
节点
id
的出度(若该点不存在则返回 0 )
-
std::vector<_NId> successors(const _NId &id) const
获取该节点后继节点的编号数组。(该节点指向其他节点)
- 参数
id – 节点编号
- 返回
节点
id
的后继节点编号数组。(若该点不存在则返回空数组)
-
std::vector<_NId> predecessors(const _NId &id) const
获取该节点前序节点的编号数组。(其他节点指向该节点)
- 参数
id – 节点编号
- 返回
节点
id
的前序节点编号数组。(若该点不存在则返回空数组)
-
_NId random_successor(const _NId &id) const
获取该节点的一个随机后继节点。
- 参数
id – 节点编号
- 返回
节点
id
的一个随机后继节点- 抛出
NoNodeException – 节点
id
不存在NoNeighborsException – 节点
id
没有后继节点
-
_NId random_predecessor(const _NId &id) const
获取该节点的一个随机前序节点。
- 参数
id – 节点编号
- 返回
节点
id
的一个随机前序节点- 抛出
NoNodeException – 节点
id
不存在NoNeighborsException – 节点
id
没有前序节点
-
std::vector<_NId> neighbors(const _NId &id) const
获取与该节点有连边关系的相邻节点编号数组。(无论指向)
- 参数
id – 节点编号
- 返回
与节点
id
有连边关系的相邻节点编号数组。(若该点不存在则返回空数组)
-
typedef DirectedNetwork<_NId, _NData, _EData> _DiNetType;