模板的用法:
在函数或类前
template<class T>
在函数体或类体中将需要的数据类型替换成T即可.在main()调用函数时,定义好实参的数据类型即可合法使用该函数.
模板的意义在于不必写若干函数的重载.
其中,模板声明中的"class"用"typename"更合适,'T'也可用任意字符代替
template<typename T>
ALGraph.h文件
//邻接表
#include<vector>
#include<queue>//STL
enum GraphType {undigraph,digraph};//定义图类型:有向图和无向图
边类和顶点类
//边类
struct EdgeNode
{
int adjvex; //将结点用1,2,3...表示位置
EdgeNode *nextnode; //指向下一个节点
/*可有一个数据成员表示权*/
};
//顶点类
struct VexNode
{
char data; //顶点的值
EdgeNode *firstedge; //指向对应边表的头指针
};
//注意顶点类有EdgeNode定义,所以两个结构体的顺序固定
图类
//图类
class ALGrape
{
public:
ALGrape(GraphType k,vector<char> vex, int v, int e);//图类型,储存各顶点值的数组,顶点数,边数
~ALGrape();
void DFSTraverse(); //一般图 深度优先遍历
void BFSTraverse(); //一般图 广度优先遍历
private:
int vexnum; //顶点数
int edgenum; //边数
vector <VexNode> vexlist ; //顶点表
GraphType kind; //图的类型
void DFS(int v, bool *visited); //连通图 深度优先遍历
};
构造函数算法思想:
每条边连接va,