拓扑排序

简介:        对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前       【例】对如上学生选课工程图进行拓扑排序, 得到的拓扑有序...

       img_bc66fdffd33007d83c7bbe7d83b85a9f.jpg

       对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前

      【例】对如上学生选课工程图进行拓扑排序, 得到的拓扑有序序列为

  C1 , C2 , C3 , C4 , C5 , C6 , C8 , C9 , C7

  或 C1 , C8 , C9 , C2 , C5 , C3 , C4 , C7 , C6

下面为拓扑排序的C代码

typedef struct Gnode{    /*邻接表的表节点类型*/
 int adjvex;     /*邻接顶点编号*/
 int weight;     /*弧上的权值*/ 
 struct Gnode *nextarc;    /*指示下一个弧的节点*/
}Gnode

typedef struct Adjlist {   /*邻接表的头节点类型*/
 char vdata;              /*顶点的数据信息*/
 struct Gnode *Firstadj;  /*指向下一个弧的第一个表节点*/
}Adjlist;

typedef struct LinkedWDigraph{    /*图的类型*/
 int n,e;                        /*图中顶点个数和边数*/
 struct Adjlist *head;      /*指向图中第一个顶点的邻接表的头节点*/
}LinkedWDigraph;

int Toplogical(LinkedWDigraph G)
{
 Gnode *p;
 int j,w,top=0;
 int *Stack,*ve,*indegree;
 ve=(int *)malloc((G.n+1)*sizeof(int));
 indegree=(int *)malloc((G.n+1)*sizeof(int));    /*存储网中各顶点的入度*/
 Stack=(int *)malloc((G.n+1)*sizeof(int));       /*存储入度为0的顶点的编号*/
 if (!ve || !indegree || !Stack) exit(0);
 for (j=1;j<=G.n;j++)  {
   ve[j]=0;  indegree[j]=0;
 }  /*for*/  
 for (j=1;j<=G.n;j++) {   /*求网中各顶点的入度*/
   p=G.head[j].Firstadj;
   while(p) {
      indegree[p->adjvex]++];   p=p->nextarc;
   }  /*while*/
 }
 
 for (j=1;j<G.n;j++)   /*求网中入度为0的顶点并保存其编号*/
  if (!indegree[j])  Stack[++top]=j;
  
 while (top>0) {
  w=Stack[top--];
  printf("%c   ",G.head[w].vdata);
  p=G.head[w].Firstadj;
  while (p){
   indegree[p->adjvex]--;
   if (!indegree[p->adjvex])
    Stack[++top]=p->adjvex;
   if (ve[p->adjvex<ve[w]+p->weight)
    ve[p->adjvex]=ve[w]+p->weight;
   p=p->nextarc;
  }
 }
 return ve[w];
}

相关文章
|
8月前
|
存储 监控 安全
基于阿里云的最低成本私有化部署DeepSeek
本方案详细介绍了基于阿里云的成本优化策略与部署架构,涵盖计算、存储、网络资源选型及优化技巧。核心内容包括:突发性能实例(如`ecs.g7.large`)结合预留实例券降低计算成本;高效云盘与ESSD AutoPL分层存储设计;内网DNS优化及带宽流量包控制网络支出。同时提供负载均衡配置、自动伸缩规则与安全加固措施,确保系统稳定运行。通过七大降本技巧(如抢占式实例、智能分层存储、RDS Serverless版等),实现总月成本控制在¥450左右,仅为传统方案的1/3以下。最后附带成本监控仪表盘与持续优化建议,助力企业高效管理云资源。
756 7
|
前端开发
前端常用方法防抖(debounce)和节流(throttle)的示例演示及应用场景说明
前端常用方法防抖(debounce)和节流(throttle)的示例演示及应用场景说明
537 0
物联网:“定向卡”与“通用卡”的区别
在讨论“定向卡”与“通用卡”的区别时,我们首先要明确这两种卡通常是在不同背景下被提及的,比如在营销、金融服务、会员卡系统等领域。不过,为了提供一个通用的、跨领域的理解,我们可以从以下几个维度来探讨它们的区别:
|
运维 数据可视化 搜索推荐
零代码、低代码、全代码的区别
如果您留意过这两年IT行业的新词汇,一定会注意到零代码、低代码这几个新事物。此前,阿里云智能总裁、达摩院院长张建锋在会上表示:未来的软件开发一定是碎片化的,2021年的潮流就是低代码开发,低代码开发将是2021年的行业关键词。从这句话中,我们不难发现,随着低代码、无代码在2021开年的火爆程度,俨然有逐渐成为新风口的趋势。对此,为了帮助大家更快速的了解低代码、无代码、全代码,我特地为大家整理了他们之间的区别,供大家参考学习,希望对大家有所帮助!
4113 1
零代码、低代码、全代码的区别
|
文字识别
印刷文字识别产品使用合集之证件扫描的置信度字段,这个有什么用
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
|
数据挖掘 Python
用Python实现地理探测器
用Python实现地理探测器
629 0
|
SQL 缓存 关系型数据库
认真研究MySQL的主从复制
认真研究MySQL的主从复制
147 0
【Leetcode -111.二叉树的最小深度 -112.路径总和】
【Leetcode -111.二叉树的最小深度 -112.路径总和】
88 0
|
弹性计算 JSON NoSQL
阿里云ECS七天训练营-搭建个人Leanote云笔记
Leanote是一款在线的云笔记应用,有如下特点: • 支持网页、PC、手机APP客户端和微信版,随时记录,方便分享,支持语音,图片输入。 • 代码高亮,涵盖所有主流语言的代码高亮,随心所欲在Leanote里写代码,记知识。 • Markdown 编辑器,实时同步预览。 • 专业数学公式编辑,像Word和Latex能编辑数学公式。 • 支持创建思维脑图,将散乱的想法以树状信息分层展示。 • 详细历史纪录,每次保存都在后端备份,轻松查找,一键恢复。 • 实时同步云端
458 0
阿里云ECS七天训练营-搭建个人Leanote云笔记
|
SQL 自然语言处理 搜索推荐
【重新发现PostgreSQL之美】- 16 like '%西出函谷关%' 模糊查询
大家好,这里是重新发现PostgreSQL之美 - 16 like '%西出函谷关%' 模糊查询