第71课 - 图的定义与操作

1、图的定义与操作 

         讨论中。。。 

                


        定义 

                -图是由顶点集合(Vertex)及顶点间的关系集合(Edge

                    组成的一种数据结构: 

                                                Graph= (V, E) 

                        V = { x | x ∈ 某个数据对象 } 是顶点的有穷非空集合 

                        E = { (x, y) | x , y ∈ V }是顶点之间关系的有穷集合 


        问题 

                思考: 

                        G1, G2, G3, G4都是图吗?有什么异同?可以继续分类吗?

                    

                                    链表是特殊的二叉树,二叉树是特殊的图


        无向边 

                -顶点x和y之间的边没有方向,则称该边为无向边

                - (x , y)与(y , x)意义相同,表示x和y之间有连接 



        无向图 

            - 图中任意两个顶点之间的边均是无向边,则称该图为无向图

                    



        有向边 

            -顶点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 )的定义 

                -与图的边相关的数据元素叫做权 

                -权常用来表示图中顶点间的 距离或者 耗费

                    


        图的一些常用操作 

                -设置顶点的值 

                -获取顶点的值 

                -获取邻接顶点 

                -设置边的值 

                -删除边 

                -获取顶点数 

                -获取边数

                 -  。。。


        图在程序中表现为一种特殊的数据类型 

                                


2、编程实验 

图抽象类的创建     Graph.h
#ifndef GRAPH_H
#define GRAPH_H

#include "Object.h"
#include "SharedPointer.h"
#include "Array.h"


namespace DTLib
{

template < typename V, typename E > //V:与顶点相关联数据元素类型,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)
    {
        return ID(i) + OD(i);
    }
    
};

}


#endif // GRAPH_H

main.cpp

#include <iostream>
#include "Graph.h"

using namespace std;
using namespace DTLib;


int main()
{
    Graph<int,int>* g = NULL;

    return 0;
}


                                    



3、小结 

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

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

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

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



猜你喜欢

转载自blog.csdn.net/qq_39654127/article/details/80542186