开发者社区> 指尖的舞曲> 正文

数据结构与算法——图论

简介: 题型1:拓扑排序 1)使用一个入度数组indegree来记录每个顶点的入度数,并使用一个变量来记录已经访问的顶点数 2)将入度为0的顶点压入栈中 3)将栈顶的元素删除。访问的顶点数加1.并将入该顶点相邻的所有顶点的入度数减1,如果减1之后的入度数为0,则将其压入栈中; 4)重复上面的过程,直到栈中的元素为空。
+关注继续查看

题型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);
                    }
                }
            }
        }
    }
}

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据结构与算法(六) 贪心算法
数据结构与算法(六) 贪心算法
19 0
数据结构与算法(八)贪心算法
数据结构与算法(八)贪心算法
28 0
【数据结构与算法】逆置算法
【数据结构与算法】逆置算法
22 0
【戏玩算法】01-咱来唠会儿数据结构与算法
本篇文章介绍了数据结构与算法的概念,以及几种常见的数据结构是什么,有什么优点和缺点;在文章的最后还介绍了算法的五个特征以及算法所追求的目标。
24 0
【数据结构与算法】之动态规划经典问题
【数据结构与算法】之动态规划经典问题
66 0
数据结构与算法—拓扑排序
拓扑排序,很多人都可能听说但是不了解的一种算法。或许很多人只知道它是图论的一种排序,至于干什么的不清楚。又或许很多人可能还会认为它是一种啥排序。而实质上它是对有向图的顶点排成一个线性序列。
62 0
数据结构与算法学习——动态规划-3
数据结构与算法学习——动态规划-3
360 0
数据结构与算法学习——动态规划-2
数据结构与算法学习——动态规划-2
60 0
数据结构与算法学习——动态规划-1
数据结构与算法学习——动态规划-1
59 0
数据结构与算法(二)算法
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
40 0
+关注
指尖的舞曲
目前在阿里巴巴搬砖
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
超全算法笔试-模拟题精解合集
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载