图论概念
图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。
图的分类
有向图,无向图;单图;
平面图,连通图,强连通图,有向无环图,AOV网,AOE网,完全图,二分图,完全二分图,正则图,二叉图;
树,外向树、内向树,章鱼图,人掌图(边仙人掌、点仙人掌),有向无环图,分图。
这里面,很多都是我闻所未闻的东西。。。图论真的博大精深呀。
基本术语
阶(Order):图G中顶集V的大小称作图G的阶。
子图(Sub-Graph):当图G'=(V',E')其中V‘包含于V,E’包含于E,则G'称作图G=(V,E)的子图。每个图都是本身的子图。
生成子图(Spanning Sub-Graph):指满足条件V(G') = V(G)的G的子图G'。
导出子图(Induced Subgraph):以图G的顶点集V的非空子集V1为顶点集,以两端点均在V1中的全体边为边集的G的子图,称为V1导出的导出子图;以图G的边集E的非空子集E1为边集,以E1中边关联的顶点的全体为顶点集的G的子图,称为E1导出的导出子图。
度(Degree):一个顶点的度是指与该顶点相关联的边的条数,顶点v的度记作d(v)。
入度(In-degree)和出度(Out-degree):对于有向图来说,一个顶点的度可细分为入度和出度。一个顶点的入度是指与其关联的各边之中,以其为终点的边数;出度则是相对的概念,指以该顶点为起点的边数。
自环(Loop):若一条边的两个顶点为同一顶点,则此边称作自环。
路径(Path):从u到v的一条路径是指一个序列v0,e1,v1,e2,v2,...ek,vk,其中ei的顶点为vi及vi - 1,k称作路径的长度。如果它的起止顶点相同,该路径是“闭”的,反之,则称为“开”的。一条路径称为一简单路径(simple path),如果路径中除起始与终止顶点可以重合外,所有顶点两两不等。
行迹(Trace):如果路径P(u,v)中的边各不相同,则该路径称为u到v的一条行迹。
轨道(Track):如果路径P(u,v)中的顶点各不相同,则该路径称为u到v的一条轨道。
闭的行迹称作回路(Circuit),闭的轨称作圈(Cycle)。
(另一种定义是:walk对应上述的path,path对应上述的track。Trail对应trace。)
桥(Bridge):若去掉一条边,便会使得整个图不连通,该边称为桥。
基本概念
h图是一个有序对<V,E>,V是结点集,E是边集,当½V½,½E½有限时,<V,E>称为有限图;否则称无限图.
h无向边, 与无序结点(v,u)相关联的边;有向边,与有序结点<v,u>相关联的边.
h无向图,每条边都是无向边的图,记作G=<V,E>; 每条边都是有向边的图,记作D=<V,E>.
h混合图,既有有向边,也有无向边的图.
h平凡图,仅有一个结点的图;零图,边集为空集的图<V, Æ>,即仅有结点的图.
h自回路(环),关联于同一个结点的边.
h无向平行边,联结相同两个结点的多于1条的无向边;有向平行边,联结两个结点之间的多于1条且方向相同的有向边.
h简单图,不含平行边和自回路的图.
h在无向图G=<V,E>中,与结点v(ÎV)关联的边数,即为结点度数deg(v)或d(v).;在有向图中,结点v的出度和入度之和为度数.
h在有向图D=<V,E>中,以v(ÎV)为起点的边之条数为出度deg+(v);以v(ÎV)为终点的边之条数为入度deg-(v)..
h最大度数,D(G)=max{d(v)½vÎV};最小度数,d(G)=min{d(v)½vÎV}
h有n个结点的且每对结点都有边相连无向简单图,无向完全图Kn. 此时有 ;有n个结点的且每对结点之间都有两条方向相反的边相关连的有向简单图为有向完全图,.此时有
h设G=<V,E>, V,E的子集V¢,E¢构成的图G¢=<V¢,E¢>是图G的子图;若G¢ÍG且G¢¹G,(V¢ÌV或E¢ÌE),G¢是G的真子图.
h生成子图,设图G=<V,E>, 若E¢ÍE, 则图<.V,E¢>是<V,E>的生成子图. 即结点与原图G相同的子图,为生成子图.
h补图`G=<V,E¢>,设G=<V,E>, 以V为结点集,以使G成为完全图所添加的边为边集E¢的图,就是图G的补图G¢,.,即<V,EÈE¢>是完全图, 其中EÇE¢=Æ.
h图的同构,设G1=<V1,E1>和G2=<V2,E2>, 存在双射f:V1®V2,"(vi,vj)ÎE1, 当且仅当 (f(vi),f(vj))ÎE2,且(vi,vj)与 (f(vi),f(vj))的重数相同. 则G1≌G2.
同构充分条件:建立两个图的对应关系,这个关系是双射函数.
同构必要条件:①结点数相同;②边数相同;③度数相同的结点个数相同.
储存方法
邻接链表
int h[maxn],hs; int edge{int s,n;}e[maxm];//存储 add(int q,int z){e[++hs]=(edge){z,h[q]},h[q]=hs;}//加边 for(int i=1;i<=n;i++) for(int j=h[i];j;j=e[j].n){}//遍历
方法2(更快)
int h[maxn],hs; int e_s[maxm],e_n[maxm];//存储 add(int q,int z){++hs,e_s[hs]=z,e_n[hs]=h[q],h[q]=hs;}//加边 for(int i=1;i,=n;i++) for(int j=h[i];j;j=e_n[j]){}//遍历
邻接矩阵,边表,前向星,十字链表。
常用的就是邻接链表了。
下辖分类
欧拉图
强连通分量
网络流