第十二章 图的基本概念优秀PPT.ppt
《第十二章 图的基本概念优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第十二章 图的基本概念优秀PPT.ppt(109页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十二章第十二章 图的基本概图的基本概念念第一页,本课件共有109页第第12章章 图的基本概念图的基本概念n n图的定义 n n图的术语 n n图的运算n n图的存储n n图的遍历n n图遍历的应用第二页,本课件共有109页图的定义图的定义n n图可以用G=(V,E)表示。其中,V是顶点的集合,E是连接顶点的边(弧)的集合。n n有向图:如果边是有方向的,称为有向图。有向图的边用表示。表示从A出发到B的一条边。在有向图中,和 是不一样的。n n无向图:如果边是无方向的,称为无向图。无向图的边通常用圆括号表示。(A,B)表示顶点A和B之间有一条边。无向图也称为双向图。n n加权图:边被赋予一个权
2、值的图称为加权图。如果图是有向的,称为加权有向图,如果是无向的,称为加权无向图。第三页,本课件共有109页n n如G1:V=A,B,C,D,E=,表示的图如下所示第四页,本课件共有109页n n无向图 V=A,B,C,D,E,E=(A,B),(A,C),(B,D),(B,E),(D,E),(C,E)第五页,本课件共有109页n n加权图第六页,本课件共有109页第第12章章 图的基本概念图的基本概念n n图的定义 n n图的术语 n n图的运算n n图的存储n n图的遍历n n图遍历的应用第七页,本课件共有109页图的基本术语图的基本术语n n邻接:如(Vi,Vj)是图中的一条边,则称Vi和V
3、j是邻接的。如是图中的一条边,则称Vi邻接到Vj,或Vj和Vi邻接。n n度:无向图中邻接于某一结点的边的总数。n n入度:有向图中进入某一结点的边数,称为该 结点的入度 n n出度:有向图中离开某一结点的边数,称为该结点的出度第八页,本课件共有109页子图子图第九页,本课件共有109页第十页,本课件共有109页路径和路径长度路径和路径长度n n对1iN,结点序列w1,w2,wN中的结点对(wi,wi+1)都有(wi,wi+1)E或 E,那么,w1,w2,wNN是图中的一条路径。n n非加权的路径长度就是组成路径的边数,对于路径非加权的路径长度就是组成路径的边数,对于路径 w1,w2,w1,w
4、2,w wNN,非加权路径长度为N-1。n n加权路径长度是指路径上所有边的权值之和。n n简单路径和环:如果一条路径上的所有结点,除了 起始结点和终止结点可能相同外,其余的结点都不相同,则称其为简单路径。一个回路或环是一条简单路径,其起始结点和终止结点相同,且路径长度 至少为1。第十一页,本课件共有109页无向图的连通性无向图的连通性n n连通:顶点v至v 之间有路径存在 n n连通图:无向图 G 的任意两点之间都是 连通的,则称 G 是连通图。n n连通分量:非连通图中的极大连通子图第十二页,本课件共有109页第十三页,本课件共有109页有向图的连通性有向图的连通性n n强连通图:有向图
5、G 的任意两点之间都是 连通的,则称 G 是强连通图。n n强连通分量:极大连通子图 n n弱连通图:如有向图G不是强连通的,但如 果把它看成是无向图时是连通的,则称该 图是弱连通的第十四页,本课件共有109页第十五页,本课件共有109页完全图完全图n n完全图:每两个节点之间都有边的无向图称为完全图。完全图有 n(n-1)/2 条边的无向图。其中 n 是结点个数。即Cn n2 n n有向完全图:每两个节点之间都有两条有向完全图:每两个节点之间都有两条弧的有向图称为有向完全图。有向完全弧的有向图称为有向完全图。有向完全图有图有 n(n-1)n(n-1)条边。其中条边。其中 n n 是结点个数。
6、是结点个数。即即2 C2 Cn2 2 n n如果一个有向图中没有环,则称为有向无环图,简写为DAG 第十六页,本课件共有109页生成树生成树n n生成树是连通图的极小连通子图。包含图的所有 n 个结点,但只含图的 n-1 条边。在生成树中添加一条边之后,必定会形成回路或环。第十七页,本课件共有109页第第12章章 图的基本概念图的基本概念n n图的定义 n n图的术语 n n图的运算n n图的存储n n图的遍历n n图遍历的应用第十八页,本课件共有109页图的运算图的运算n n常规操作:常规操作:n n构造一个由若干个结点、若干条边组成的图;构造一个由若干个结点、若干条边组成的图;n n判断两
7、个结点之间是否有边存在;判断两个结点之间是否有边存在;n n在图中添加或删除一条边;在图中添加或删除一条边;n n返回图中的结点数或边数;返回图中的结点数或边数;n n按某种规则遍历图中的所有结点。按某种规则遍历图中的所有结点。n n和应用紧密结合的运算:n n拓扑排序拓扑排序 n n找最小生成树找最小生成树 n n找最短路径等。找最短路径等。第十九页,本课件共有109页图的抽象类图的抽象类template template class graph class graph public:public:virtual bool insert(int u,int v,TypeOfEdge w)=0
8、;virtual bool insert(int u,int v,TypeOfEdge w)=0;virtual bool remove(int u,int v)=0;virtual bool remove(int u,int v)=0;virtual bool exist(int u,int v)const=0;virtual bool exist(int u,int v)const=0;virtual numOfVer()const return Vers;virtual numOfVer()const return Vers;virtual numOfEdge()const return
9、 Edges;virtual numOfEdge()const return Edges;protected:protected:int Vers,Edges;int Vers,Edges;第二十页,本课件共有109页第第12章章 图的基本概念图的基本概念n n图的定义 n n图的术语 n n图的运算n n图的存储n n图的遍历n n图遍历的应用第二十一页,本课件共有109页图的存储图的存储n n邻接矩阵和加权邻接矩阵 n n邻接表第二十二页,本课件共有109页邻接矩阵邻接矩阵有向图有向图n n设有向图具有 n 个结点,则用 n 行 n 列的布尔矩阵 A 表示该有向图如果i 至 j 有一条有向
10、边,Ai,j=1,如果 i 至 j 没有一条有向边,Ai,j=0 第二十三页,本课件共有109页邻接矩阵邻接矩阵有向图有向图n n在物理实现时的考虑:分别用0、1、2、3 分别标识结点A、B、C、D。而将真正的数据字段之值放入一个一维数组之中。第二十四页,本课件共有109页邻接矩阵邻接矩阵无向图无向图n n设无向图具有设无向图具有n n 个结点,则用个结点,则用n n 行行n n 列的布尔矩阵列的布尔矩阵A A 表表示该无向图;并且示该无向图;并且Ai,j=1,Ai,j=1,如果如果i i 至至j j 有一条无向边;有一条无向边;Ai,j=0Ai,j=0如果如果i i 至至j j 没有一条无向
11、边没有一条无向边第二十五页,本课件共有109页加权的邻接矩阵加权的邻接矩阵有向图有向图n n设有向图具有 n 个结点,则用 n 行 n 列的矩阵 A 表示该有向图;如果i 至 j 有一条有向边且它的权值为a,则Ai,j=a。如果 i 至 j 没有一条有向边。则Ai,j=空 或其它标志 第二十六页,本课件共有109页邻接矩阵的特点邻接矩阵的特点n n优点:判断任意两点之间是否有边方便,仅耗费O(1)时间。n n缺点:即使 n2 条边,也需内存n2单元,太多;仅读入数据耗费O(n2)时间,太长。而大多数的图的边数远远小于n2 第二十七页,本课件共有109页邻接矩阵类的定义邻接矩阵类的定义templ
12、ate template class adjMatrixGraph:public graph class adjMatrixGraph:public graph public:adjMatrixGraph(int vSize,const TypeOfVer d,public:adjMatrixGraph(int vSize,const TypeOfVer d,TypeOfEdge noEdgeFlag);TypeOfEdge noEdgeFlag);bool insert(int u,int v,TypeOfEdge w);bool insert(int u,int v,TypeOfEdge
13、w);bool remove(int u,int v);bool remove(int u,int v);bool exist(int u,int v)const;bool exist(int u,int v)const;adjMatrixGraph()adjMatrixGraph();private:private:TypeOfEdge*edge;/TypeOfEdge*edge;/存放邻接矩阵存放邻接矩阵TypeOfVer*ver;/TypeOfVer*ver;/存放结点值存放结点值TypeOfEdge noEdge;/TypeOfEdge noEdge;/邻接矩阵中的邻接矩阵中的 的表示
14、值的表示值;第二十八页,本课件共有109页构造函数构造函数template adjMatrixGraph:adjMatrixGraph(int vSize,const TypeOfVer d,TypeOfEdge noEdgeFlag)int i,j;Vers=vSize;Edges=0;noEdge=noEdgeFlag;noEdge=noEdgeFlag;/存放结点的数组的初始化 ver=new TypeOfVervSize;ver=new TypeOfVervSize;for(i=0;ivSize;+i)veri=di;第二十九页,本课件共有109页 /邻接矩阵的初始化 edge=new
15、 TypeOfEdge*vSize;for(i=0;ivSize;+i)edgei=new TypeOfEdgevSize;for(j=0;jvSize;+j)edgeij=noEdge;for(j=0;jvSize;+j)edgeij=noEdge;edgeii=0;edgeii=0;第三十页,本课件共有109页析构函数析构函数template adjMatrixGraph:adjMatrixGraph()delete ver;for(int i=0;iVers;+i)delete edgei delete edge;第三十一页,本课件共有109页Insert函数函数template boo
16、l adjMatrixGraph:bool adjMatrixGraph:insert(int u,int v,TypeOfEdge w)insert(int u,int v,TypeOfEdge w)if(u Vers-1|v Vers-1)return false;if(edgeuv!=noEdge)return false;edgeuv=w;edgeuv=w;+Edges;return true;第三十二页,本课件共有109页Remove函数函数template bool adjMatrixGraph:remove(int u,int v)if(u Vers-1|v Vers-1)ret
17、urn false;if(edgeuv=noEdge)return false;edgeuv=noEdge;-Edges;return true;第三十三页,本课件共有109页Exist函数函数template bool adjMatrixGraph:exist(int u,int v)const if(u Vers-1|v Vers-1)return false;if(edgeuv=noEdge)return false;else return true;第三十四页,本课件共有109页图的存储图的存储n n邻接矩阵和加权邻接矩阵 n n邻接表第三十五页,本课件共有109页邻接表邻接表n n设
18、有向图或无向图具有 n 个结点,则用结点表、边表表示该有向图或无向图。n n结点表:用数组或单链表的形式存放所有的结点 值。如果结点数n已知,则采用数组形式,否则应 采用单链表的形式。n n边表(边结点表):每条边用一个结点进行表示。同一个结点出发的所有的边形成它的边结点单链表。第三十六页,本课件共有109页第三十七页,本课件共有109页邻接表的特点邻接表的特点n n邻接表是图的标准存储方式 n n优点:内存 结点数 边数,处理时间也是结 点数 边数,即为O(|V|+|E|)。n n当我们谈及图的线性算法时,一般指的是 O(|V|+|E|)n n缺点:n n确定 i-j 是否有边,最坏需耗费
19、O(n)时间。n n无向图同一条边表示两次。边表空间浪费一倍。n n有向图中寻找进入某结点的边,非常困难。第三十八页,本课件共有109页邻接表类的定义邻接表类的定义template class adjListGraph:public graph public:adjListGraph(int vSize,const TypeOfVer d);bool insert(int u,int v,TypeOfEdge w);bool remove(int u,int v);bool exist(int u,int v)const;adjListGraph();第三十九页,本课件共有109页privat
20、e:struct edgeNode/struct edgeNode/邻接表中存储边的结点类邻接表中存储边的结点类 int end;/终点编号 TypeOfEdge weight;/边的权值 edgeNode*next;edgeNode*next;edgeNode(int e,TypeOfEdge w,edgeNode*n=NULL)end=e;weight=w;next=n;struct verNode/保存顶点的数据元素类型 TypeOfVer ver;/顶点值 edgeNode*head;/对应的单链表的头指针 verNode(edgeNode*h=NULL)head=h;verNode*
21、verList;verNode*verList;第四十页,本课件共有109页构造函数构造函数template adjListGraph:adjListGraph(int vSize,const TypeOfVer d)Vers=vSize;Edges=0;verList=new verNodevSize;for(int i=0;i Vers;+i)verListi.ver=di;第四十一页,本课件共有109页析构函数析构函数template adjListGraph:adjListGraph()int i;edgeNode*p;edgeNode*p;for(i=0;i next;delete
22、p;delete verList;delete verList;第四十二页,本课件共有109页Insert函数函数template bool adjListGraph:insert(int u,int v,TypeOfEdge w)verListu.head=new edgeNode(v,w,verListu.head);+Edges;return true;第四十三页,本课件共有109页Remove函数函数template template bool adjListGraph:remove(int u,int v)bool adjListGraph:remove(int u,int v)ed
23、geNode*p=verListu.head,*q;edgeNode*p=verListu.head,*q;if(p=NULL)return false;/if(p=NULL)return false;/结点结点u u没有相连的边没有相连的边 if(p-end=v)/if(p-end=v)/单链表中的第一个结点就是被删除的边单链表中的第一个结点就是被删除的边 verListu.head=p-next;verListu.head=p-next;delete p;-Edges;delete p;-Edges;return true;return true;while(p-next!=NULL&p-
24、next-end!=v)p=p-next while(p-next!=NULL&p-next-end!=v)p=p-next if(p-next=NULL)return false;/if(p-next=NULL)return false;/没有找到被删除的边没有找到被删除的边 q=p-next;p-next=q-next;delete q;q=p-next;p-next=q-next;delete q;-Edges;-Edges;return true;return true;第四十四页,本课件共有109页Exist函数函数template bool adjListGraph:exist(i
25、nt u,int v)const edgeNode*p=verListu.head;while(p!=NULL&p-end!=v)p=p-next;if(p=NULL)return false;else return true;第四十五页,本课件共有109页第第12章章 图的基本概念图的基本概念n n图的定义 n n图的术语 n n图的运算n n图的存储n n图的遍历n n图遍历的应用第四十六页,本课件共有109页图的遍历图的遍历n n对有向图和无向图进行遍历是按照某种次序系统地访问对有向图和无向图进行遍历是按照某种次序系统地访问图中的所有顶点,并且使得每个顶点只能被访问一次。图中的所有顶点,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十二章 图的基本概念优秀PPT 第十二 基本概念 优秀 PPT
限制150内