第六章小结

学会了图的基本定义及相关的基本术语

图的存储结构:1.领接矩阵(不便与增加和删除顶点,统计边的树木,空间复杂度高)

       2.邻接表(逆邻接表)(不便与判断顶点之间是否有边, 不便于计算有向图各个顶点的度)

深度优先搜索(DFS)算法

连通图

bool visited[MVNum]
void DFS(Graph G, int v)
{
    cout << v;
    visited[v]=true;
    for(w=ForstAdjvex(G,v); w>=0; w=NextAdjVex(G,v,w))
    if(!visited[w]) DFS(G,w);
}

如果是非连通图,则要加多一层:

void DFSTraverse(Graph G)
{
     for(v=0; v<G.vexnum; v++) visited[v]=false;//访问标志数组初始化
     for(v=0; v<G.vexnum; v++) 
          if(!visited[v])  DFS(G,v);             
}

广度优先搜索(BFS)算法

连通图

void BFS(Graph G, int v)
{//使用队列
    cout << " "<<v;
    visited[v]=true;
//    InitQueue(Q);
    EnQueue(Q,v);
    while(!Q.empty())
    {
        int u;
        DeQueue(Q,u); //队列元素出队并置为u
        for(int w=FirstAdjVex(l,u); w>=0; w=NextAdjVex(l,u,w))
        {
            if(!visited[w])
            {
                cout << " "<<w;
                visited[w]=true;
                EnQueue(Q,w);
            }
         } 
    }
}

如果是非连通图,也像DFS一样加多一层。

学会了如何创建最小生成树

普利姆算法(由点到边)书本P167页

克鲁斯卡尔算法(由边到点)书本P169

如果是同一算法,没有随机树什么的,那么生成的树是唯一的

如果是手工的话,当有两条边的权值相等时,有可能生成最后各边权值和最小而且相同,但不同的树。

原文地址:https://www.cnblogs.com/ojkojk/p/13128412.html