定义
-图是由顶点集合(Vertex)及顶点间的关系集合(Edge)组成的一种数据结构
-Graph = (V,E)
-V= 是顶点的有穷非空集合
-E=是顶点之间关系的有穷集合
无向边
-顶点x和y之间的边没有方向,则称该边为无向边
-<x,y> 与<y,x>意义不同
·<x,y>表示从x连接到y,x成为尾,y成为头
·<y,x>表示从y连接到x,y称为尾,x称为头
有向图
-图中任意两个顶点之间的边均是有向边,则称该图为有向图
-无向图可以看做一种特殊的有向图
顶点邻接(Adjacent)的定义
-无向图
·如果(x,y)∈E,则称顶点x和y互为邻接
-有向图
·如果<x,y>∈E,则称顶点x邻接到顶点y
度(Degree)的定义
-顶点v的度是和v相关联的边的数目,记为TD(v)
·入度:以v为头的边的数目,记为ID(v)
·出度:以v为尾的边的数目,记为OD(v)
推论
-TD(v) = ID(v) + OD(v)
-Count(E) = ID(V1) +ID(V2)+...+ID(Vn)
-Count(E) = OD(V1)+OD(V2)+...+OD(Vn)
-Count(E) = [TD(V1) + TD(V2) + ...+TD(Vn)] / 2
权(Weight)的定义
-与图的边相关的数据元素叫做权
-权常用来表示图中顶点间的距离或者耗费
图的一些常用操作
-设置顶点的值
-获取顶点的值
-获取邻接顶点
-设置边的值
-删除边
-获取顶点数
-获取边数
图在程序中变现为一种特殊的数据类型
template <typename V,typename E>
class Graph : public Object
{
public:
virtual V getVertex(int i) = 0;
virtual bool getVertex(int i,V& value) = 0;
virtual bool setVertex(int i,const V& value) = 0;
virtual SharedPointer<Array <int>> getAdjacent(int i) = 0;
virtual E getEdge(int i,int j) = 0;
virtual bool getEdge(int i,int j,E& value ) = 0;
virtual bool setEdge(int i,int j,const E& value) = 0;
virtual bool removeEdge(int i,int j) = 0;
virtual int vCount() = 0;
virtual int eCount() = 0;
virtual int OD(int i) = 0;
virtual int ID(int i) = 0;
virtual int TD(int i) ;
};
总结:
-图是顶点与边的集合,是一种非线性的数据结构
-图中顶点可以与多个其他顶点产生邻接关系
-图中的边有与之对应的权值,表示顶点间的距离
-图在程序中变现为特殊的数据类型