无向图中的极大连通子图称为联通分量:
1.要是子图;
2.子图是连通的;
3.连通子图含有极大顶点数;
4.具有极大顶点数的连通子图包含依附于这些顶点的所有边。
在有向图G中,如果对于每一对vi,vj
1.无向图的邻接表
- 1.图中顶点用一个一维数组存储,(当然顶点也可以单链表来存储,不过数组可以容易读取顶点信息)。另外对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。
- 2.图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点个数不定,所以用单链表存储,无向图称为顶点v1的边表,有向图称为顶点v1作为弧尾的出边表
其中:
- 顶点表的各个结点由data和firstedge两个域表示,data是数据域,存储顶点信息,first是指针域,指向边表的第一个结点,即此顶点的第一个邻接点。
- 边表结点由adjvex和next两个域组成。adjvex是邻接点域,存储某顶点的邻接点在顶点表中的下标,next则存储指向边表中下一个结点的指针。
-
2.有向图
有向图的邻接表,是以顶点为弧尾来存储,这样很容易得到每个顶点的出度。有时为了便于确定顶点的入度或者以顶点为弧头的弧,我们可以建立一个有向图的逆邻接表,即对每个顶点vi都建立一个链接为vi为弧头的表。
对于带权值的网图,可以在边表结点定义中增加一个weight的数据域,存储权值信息。
结点定义的代码
typedef char VertexType; /*顶点类型由用户自定义*/ typedef int EdgeType; /*边上的权值类型应由用户定义*/ typedef struct EdgeNode{ /*边表结点*/ int adjvex; EdgeType weight; struct EdgeNode *next; }EdgeNode; typedef struct VertexNode{ /*顶点表结点*/ vertexType data; /*顶点域*/ EdgeNode *firstedge; /*边表头指针*/ }VertexNode,AdjList[MAXVEX]; typedef struct{ AdjList adjList; int numVertexes,numEdges; /*图中当前顶点数和边数*/ }VertexNode,AdjList[MAXVEX];
2.十字链表
顶点表结构:
data firstin firstout 其中firstin表示入边表头指针,指向该节点的入边表中第一个节点,firstout表示出边表头指针,指向该顶点的出边表中的第一个结点;
边表结点结构:tailvex headvex headlink taillink 其中tailvex是指弧起点在顶点表的下标,headvex是指弧终点在顶点表中的下标,headlink是指入边表指针域,指向终点相同的下一条边,taillink是指边表指针域,指向起点相同的下一条边。如果是网,还可以增加一个weight域来存储权值。
邻接多重表
无向图中:
边表结点结构如下:ivex ilink jvex jlink 其中ivex和jvex是与某条边依附的两个顶点在顶点表中下标。ilink指向依附顶点ivex的下一条边,jlink指向依附顶点jvex的下一条边。这就是邻接多重表结构。