第六章学习小结

一.图的概念:

1.图、无向图、有向图、完全图

2.度、入度、出度

3.路径:由顶点和相邻顶点序偶构成的边所形成的序列

4.连通图、连通分量(无向图)

5.强连通图、连通分量:极大强连通子图(有向图)

二. 图的存储结构:

1.邻接矩阵

typedef struct
{
    char vexs[maxvexs];//顶点表
    int arc[maxvexs][maxvexs];//邻接矩阵
    int vertexes,edges;//图的顶点与边
}graph;

2.邻接表

typedef struct EdgeNode
{
    int adjvex; //邻接点域,存储该顶点对应的下标
    int weight; //用于存储权值
    struct EdgeNode *next;  //指向下一个邻接点
}EdgeNode;//边表结点
 
typedef struct VertexNode //顶点表结点
{
    char data; //顶点域,存储顶点信息
    EdgeNode *firstedge; //边表头指针
}VertexNode,AdjList[MAXVEX];
 
typedef struct
{
    AdjList adjList;
    int numVertexes,numEdges;//图中当前顶点数和边数
}GraphAdjList;

三.图的遍历

1.BFS(广度优先遍历)

2.DFS(深度优先遍历)

四.最小生成树

Prim算法:针对顶点,对于稠密图(边数非常多的情况)更好;
Kruskal算法:针对边,对于稀疏图(边数少)时更好。

五.最短路径

Dijkstra算法:按边的径权值递增的次序产生最短路径

算法的思路并不算难,但要将其变为能让计算机跑起来的代码就有难度了

学习心得:图的内容感觉是数据结构中较为困难的内容,现阶段对图的掌握也没有这么理想,在个人小测中也因为没有仔细审题而踩到了坑。PTA上的踩鳄鱼问题也是一开始完全不知道该如何下手,感觉自己第六章白学了一样。所以以后还是要多动手敲代码,不要偷懒,只有自己认真的把代码写出来,一点点完善,才能使自己的印象更深刻。

你可能感兴趣的:(第六章学习小结)