zoukankan      html  css  js  c++  java
  • 数据结构与算法——图论

    题型1:拓扑排序

    1)使用一个入度数组indegree来记录每个顶点的入度数,并使用一个变量来记录已经访问的顶点数

    2)将入度为0的顶点压入栈中

    3)将栈顶的元素删除。访问的顶点数加1.并将入该顶点相邻的所有顶点的入度数减1,如果减1之后的入度数为0,则将其压入栈中;

    4)重复上面的过程,直到栈中的元素为空。

    5)判读访问的顶点数是否等于图的顶点数,看拓扑排序是否成功

    实现代码:

    status TopoLogicalSort(ALGraph G)
    {
        //有向图G采用邻接表存储结构
        //若G无回路,则返回G的顶点的一个拓扑序列并返回OK,否则返回error
        finddegree(G,indegree);
        initstack(s);
        for(i=0;i<G.vexnum;++i)
            if(!indegree[i]) push(s,i);
        count=0;
        while(!stackempty(s))
        {
            pop(s,i);
            cout<<s<<' ';
            ++count;
            for(p=G.vetices[i].furstarc;p;p=p->next)
            {
                k=p->adjvex; 
                if(!(--indegree[k])) push(s,k);
            }
        }
        if(count<G.vexnum)
            cout<<error<<endl;
        else
            cout<<success<<endl;
    }

    2 深度优先遍历

    int visited[N];
    void DFS(Graph G,int v)
    {
        visited[v]=1;
        cout<<v<<' ';
        for(w=firstAdjVex(G,v),w>=0;w=NextAdjVex(G,v,w))
        {
            if(!visited[w])
                DFS(G,w);
        }
    }
    
    void DFSsearch(Graph G)
    {
        for(v=0;v<G.vexnum;++v)
            vistied[v]=0;
        for(v=0;v<G.vexnum;++v)
            DFS(G,v);
    }

    3 广度优先遍历

    int visited[N];
    void BFSsearch(Graph G)
    {
        for(v=0;v<G.vexnum;++v)
            visited[v]=0;
        Initqueue(Q);
        for(v=0;v<G.vexnum;v++)
        {
            if(!visited[v])
            {
                visited[v]=1;
                cout<<v<<' ';
                Enqueue(Q,v);
                while(!QueueEmpty(Q))
                {
                    DeQueue(Q,u);
                    for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))
                    {
                        if(!visited[w])
                        {
                            visited[w]=1;
                            cout<<w<<' ';
                            EnQueue(Q,w);
                        }
                    }
                }
            }
        }
    }

     

  • 相关阅读:
    计算机网络实验之Wireshark_DNS
    计算机网络自顶向下配套资源
    MOS_Chapter2_Process And Thread
    Leetcode 23. 合并K个升序链表
    MOS_Chapter1_Introduction
    Leetcode的开门大吉
    hexo和gitee搭建免费个人博客详细教程
    第三章 模型搭建和评估-评估
    第三章 模型搭建和评估--建模
    第二章:第四节数据可视化
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4373391.html
Copyright © 2011-2022 走看看