【数据结构—图】拓扑Topo排序

本文深入探讨了图论中的拓扑排序概念,详细解释了如何对有向无环图(DAG)进行拓扑排序,并提供了相关算法实现的步骤和示例,帮助读者理解这一重要的数据结构操作。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 50

typedef struct ArcNode{
    int adjvex;
    ArcNode *next;
};

struct VNode{
    char value;
    ArcNode *first;
};

struct AdGraph{
    VNode vertices[MaxSize];
    int vexnum,arcnum;
};


//求图中每个顶点的入度
void getAllNodeDegree(AdGraph G,int *indegree){
    for(int i = 0;i < G.vexnum;i++){
        ArcNode *p = G.vexnum[i].first;
        while(p){
            indegree[p->adjvex]++;
            p = p->next;
        }
    }
}


//算法思想:
/**
    首先,先用一个indegree数组把所有顶点的入度都初始化为0,再用一个函数(getAllNodeDegree())来得到整个图中所有顶点的入度。
    遍历整个数组,将入度为0的元素序列保存到栈中(stack[MaxSize]),当栈不为空的时候(top != -1),
将最后一个元素出栈,然后将其发到其他顶点的边也删除(这里的删除是逻辑删除,更改的是indegree[]),直到p走到空,(当p走到空的过程中,可能会有p->adjvex的顶点的入度被删完了,所以如果每一轮while(p){}循环里面都要设置if(indegree[p->adjvex] == 0;),来检测这一轮while循环删除里是否有元素的入度被删为
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值