目录
前言
本文记录了三个图算法常用类的创建模板,小伙伴们可以根据需要取用,实际使用时根据需求更改即可。本文中记录的代码模板并不一定是运行效率最高的,但个人认为可以作为基础模板进行更改。文中使用的边类型是按照有向边来设计的,使用时可以自行修改为无向边,或者使用成对使用有向边。要注意,用本文中的类实例化出的类所记录的信息可能是冗余的,比如所有节点都记录了从它们自己出发的边和临近的节点,如果边和节点以相同顺序记录那么在边类型中记录起始节点和终点节点就是冗余的。再比如节点的出度也可以从边的集合中直接算出。但这样构建代码我认为在对代码效率要求不是非常高的场合能更清晰一些。更符合面向对象编程的要求。
0. 声明和引用
因为图类型用到了哈希表,所以也要提前引用unordered_map/set。并且图类前自定义的哈希函数类用到了STL给的hash函数,所以hashtable.h也要引用。typeinfo是用来提取类名称信息的。
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <hashtable.h>
#include <typeinfo>
class Edge;
class Node;
class Graph;
using namespace std;
1. 节点模板
节点模板主要记录了