数据结构与算法 - 图论

Posted AlanTu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法 - 图论相关的知识,希望对你有一定的参考价值。

题型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);
                    }
                }
            }
        }
    }
}
技术分享图片

以上是关于数据结构与算法 - 图论的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法—图论(广搜迷宫问题)

ACM算法与竞赛协会第二次培训-图论-代码与题目汇总

ACM算法与竞赛协会第二次培训-图论-代码与题目汇总

ACM算法与竞赛协会第二次培训-图论-代码与题目汇总

算法设计与分析 实验五 图论——桥

数据结构与算法:图