图的介绍

来源:互联网 发布:程序员好找女朋友吗 编辑:程序博客网 时间:2024/05/07 13:21

心里又有些浮躁了,所以只是很粗略的看了一遍图。

网:带权的图
图的存储结构:
《1》邻接矩阵:用二维数组存放结点之间的关系
          {
          1---第i个顶点与第j个顶点有边相连
a[i][j]= 
          0---无边相连
         }
 
 
对于无向图,邻接矩阵为对称阵,第i行1的个数(或者第i列1的个数)
表示:第i个顶点的度
**对于有向图:第i行1的个数表示顶点的出度,第i列1的个数表示第i
个顶点的入度,度=入度+出度
如果对于网:
 
        {
          wi---第i个顶点与第j个顶点的权值
a[i][j]= 
          ∞---无权值
         }
 
《2》邻接表:顺序结构+链式存储相结合构成的。--出边表
Struct node/*顶点的邻接表结点*/
{
Int adjvext;//顶点序号
Strct node *next;//指向下一个相连的顶点指针域
}
Struct node2
{
Elementype info;//顶点信息
Struct node *first_adj_vertex;//与该顶点相连的第一条边
};
Node2  Vexs[maxsize];//分配数组空间存放顶点信息
Int v,e;//顶点个数,边的个数
顺序结构:顶点信息存放在数组中,链式存储:与顶点相连的另一顶点序号(在数组中的下标位置),构造的链表。
无向图:如果有v个顶点,e条边,则它的邻接表需要v个顶点邻接表首指针和2e个顶点邻接表结点。顶点的度:与该顶点相连的单链表结点个数。
对于有向图:
邻接表:为出边表,单链表中结点的个数表示出度。如果有v个顶点,e条边,则它的邻接表需要v个顶点邻接表首指针和e个顶点邻接表结点。
有向图逆邻接表:为入边表,把单链表中的结点变成入边的结点序号。
十字链表:把邻接表与逆邻接表即出边表与入边表全部表示出来。
Struct node
{
tail_vertex,head_vertex,info,head_link,tail_link;
}
 
 
 
《1》 顶点信息:指向第一条入边的指针,指向第一条出边的指针.
《2》 边的信息:弧尾—弧头—权值—下一条弧头---下一条弧尾
 
V2 v3 inf指向下一个以v3为终点的边,指向下一个以v2为起点的边
〈3〉图的遍历:经过所有的顶点一次并且仅有一次。
DFS:深度遍历栈


BFS:广度遍历队列
 最小生成树:有N个顶点构成的连通图,包含所有顶点(n个),n-1边的最小连通子图。
*   ***:N个标点,n-1条边,连通无回路
连通图生成树的权值之和最小的生成树。Prime(普里姆算法)+Kruskal克鲁斯卡尔算法 
《1》Kruskal克鲁斯卡尔算法涨边:顶点不变,每次加权值最小的边(保证连通无回路),最后边的条数=n-1时结束。
《2》Prime(普里姆算法)算法涨顶点:从一个顶点出发,加与它连通的权值最小的边,与已有顶点的集合相连通(无加路),最后顶点的个数=n个结束。
最短路径:从某个顶点出发到其他任意一个顶点的最短路径。
任意两个顶点之间的最短路径。
AOV网(activity  on vertex netword): 如果顶点表示一种活动,边表示这些活动的先后次序。
如排课系统
拓扑排序:--------可以判断一个图有没有环
《1》在图中找一个入度为0的顶点,访问(输出)
《2》把所有与该顶点相连的顶点的入度都减1(把与该顶点相连的的边全部剪掉),再重复1,2直到图中没有一个入度为0 的顶点结束或者顶点个数=n结束

0 0
原创粉丝点击