码迷,mamicode.com
首页 > 编程语言 > 详细

图论类算法备忘

时间:2015-02-07 17:29:25      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:   数据结构   

1. 图的定义: Graph = (V, E)表示图由顶点集和边集组成


2. 图的存储结构:常用的主要有 邻接矩阵和邻接表, 还有十字链表和邻接多重表等


邻接矩阵, 如 graph[i][j] = cost , 表示顶点i到顶点j的距离是cost

邻接表 数据结构表示

typedef struct arc
{
    int m_adjVertex;// 邻接顶点的索引

    int m_weight;    // 权值

    struct arc *nextArc;

}Arc;

typedef struct vertex
{
    int m_vtx;
    Arc *m_firstArc;// 指向的第一个边
}Vertex;

typedef struct graph
{
    int m_vNum;
    int m_eNum;
    Vertex *m_vertexs;
}Graph;

技术分享


3. 图的遍历有 深度优先搜索 和 广度优先搜索

深度优先搜索,算法的核心是使用递归法,将当前遍历到的节点作为新的节点,继续往下遍历,遍历完之后,才遍历其他的邻接点。
技术分享

广度优先搜索。算法的核心是使用队列存储邻接点。先遍历所有的邻接点,然后将这些邻接点存储在队列中,然后出队再遍历,再入队。
技术分享

4. 最小生成树,就是用最小,最少的边将所有顶点连接起来。

Prim 算法。用邻接矩阵存储图结构,算法核心是辅助数组 closedges, 每次寻找权值最小边,然后更新最短路径权值。

typedef struct closedge
{
int begin;// 起点
int cost;
}Closedge;


Closedges 数组实际就存储着已遍历的顶点到其他顶点的距离。


Kruskal 算法。主要还是用辅助数组,来表明是否构成回路,用是否属于同一个根来验证是否存在回路。

技术分享


5. 最短路径。

单源最短路径有 Dijkstra 算法。 不适合于负边权的情况!

技术分享


顶点到顶点间的最短路径有 Floyd 算法。

技术分享


6. 拓扑排序
先寻找入度为0的点入队,出队后,将他邻接点的入度减一,为0则入队。直到队列为空。

7. 关键路径 就是真正决定着工程完成时间的路径,意味着这条路径花费的时间是最多的。

关键活动:最早开始时间和最晚开始时间相同,意味着没法延迟,所以是关键路径。


图论类算法备忘

标签:   数据结构   

原文地址:http://blog.csdn.net/core__code/article/details/43604253

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!