数据结构 笔记:图的定义与操作

定义

-图是由顶点集合(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) ;
};

总结:

-图是顶点与边的集合,是一种非线性的数据结构

-图中顶点可以与多个其他顶点产生邻接关系

-图中的边有与之对应的权值,表示顶点间的距离

-图在程序中变现为特殊的数据类型

猜你喜欢

转载自blog.csdn.net/qq_29962483/article/details/84248055