Graph 模板类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
template <typename Tv, typename Te> // 顶点类型、边类型
class Graph {
private:
void reset() { // 所有顶点、边的辅助信息复位
for (int i = 0; i < n; i++) { // 顶点
status(i) = UNDISCOVERED; dTime(i) = fTime(i) = -1;
parent(i) = -1; priority(i) = INI_MAX;
for (int j = 0; j < n; j++) // 边
if (exists(i, j)) status(i, j) = UNDETERMINED;
}
}
public:
/* ... 顶点操作、边操作、图算法:无论如何实现,接口必须统一 ... */
}; // Graph
|
实例

Vertex 顶点类
1
2
3
4
5
6
7
8
9
10
11
12
13
|
typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus;
template <typename Tv>
struct Vertex { // 顶点对象(并未严格封装)
Tv data; int inDegree, outDegree; // 数据、出入度数
VStatus status; // (如上三种)状态
int dTime, fTime; // 时间标签
int parent; // 在遍历树中的父节点
int priority; // 在遍历树中的优先级(最短通路、极短跨边等)
Vertex (Tv const &d): // 构造新顶点
data(d), inDegree(0), outDegree(0), status(UNDISCOVERED),
dTime(-1), fTime(-1), parent(-1),
priority(INI_MAX) {}
}
|
本文由
Oscaner
创作, 采用
知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外, 均为本站原创或翻译, 转载前请务必署名