运行结果正确
完整代码
链接地址
主要代码
#include"邻接表声明.h"
#include"队列声明.h"
#include"栈的声明.h"
//统计入度
void count_degree(adj_g_point g,int degree[]){
//初始化数组
for(int i=0;i<g->v_num;i++){
degree[i]=0;
}
//开始统计
adj_e_point e;
int j;
for(int i=0;i<g->v_num;i++){
//抓取邻接表
e=g->list[i].first_edge;
//遍历连接表,把入度更新
while(e){
j=e->indx;
degree[j]++;
e=e->next;
}
}
}
//统计第一张表(每个顶点最早的开始时间),同时找个栈把从后往前走的
//顺序存起来 ,实际上和之前的拓扑排序非常相似
void sta_start_time(adj_g_point g,int* &early,stack &t){
//创建入度表
int degree[g->v_num];
//把入度塞进去
count_degree(g,degree);
//创建开始表
early=(int