博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6)图[3]拓扑排序算法
阅读量:6415 次
发布时间:2019-06-23

本文共 2426 字,大约阅读时间需要 8 分钟。

拓扑排序

方法:

①找出一个入度为0的顶点,输出(作为序列的一个元素)

②删除顶点v及其牺牲你关掉的弧,(因而后继定点的入度为1,并可能出现新的入度为0的顶点)

③重复上述步骤①②,直到找不到入度为0的顶点为止。

(拓扑序列不唯一)

1 #include "iostream"  2 #include "stack"  3 using namespace std;  4   5 const int MaxNumVertex  = 20; //最大顶点数  6 const int infinity = 65535;//无穷大  7 typedef int elementtype;       //elementtype 为int 型  8 class graph{  9 public: 10     graph(); 11     ~graph(); 12     elementtype insertvertex(elementtype v); //在图中增加一个顶点 13     elementtype insertedge(elementtype v,elementtype u);//在图中增加一条从v顶点到u顶点的弧 14     elementtype firstadj(elementtype v);//求图g中顶点v的第一个邻接点 15     elementtype nextadj(elementtype v,elementtype m);//求图中顶点v的m邻接点之后的邻接点 16     elementtype degree(elementtype v);//求图中顶点v的度数 17     bool ToplogicalSort();//拓扑排序 18     elementtype FindDegree(elementtype ind[]);//各顶点的入读存放于入度数组中 19     elementtype create();//创建图 20     int  CurrentVertex;//当前顶点数 21  22 private: 23     elementtype vertex[MaxNumVertex];//顶点表 24     elementtype edge[MaxNumVertex][MaxNumVertex];//图中弧的类型 25      26 }; 27  28 /* 29 *初始化 30 */ 31 graph::graph() 32 { 33     CurrentVertex = 0;  34     int i,j; 35     for (i=MaxNumVertex-1;i>=1;i--) 36     { 37         for (j=MaxNumVertex-1;j>=1;j--) 38         { 39             edge[i][j] = 0; 40  41         } 42     } 43      44 } 45  46 /* 47 *在图中增加一个顶点 48 */ 49 elementtype graph::insertvertex(elementtype v) 50 { 51     //判断这个顶点是否已经存在 52     int i; 53     bool flags = true; 54     for(i=1; i<=CurrentVertex; i++) 55     { 56         if(vertex[i]==v) 57         { 58             flags = false; 59             break; 60         } 61     } 62      63     if(flags) 64     { 65         CurrentVertex++; 66         vertex[CurrentVertex] = v; 67     }else{ 68         cout<
<<"顶点已经存在!"<
"<
<<"这条弧弧已经存在!"<
s;//定义并初始索要用到的栈160 elementtype ind[MaxNumVertex];//求各顶点的入度存放于入度数组ind中161 FindDegree(ind);//162 for(i=1;i<=CurrentVertex;i++)//将入度为0的顶点入栈163 {164 if(ind[i]==0)165 {166 s.push(i);167 v = i;168 }169 }170 int count =0;171 cout<<"ToplogicalSort:";172 while(!s.empty())173 {174 x = s.top();175 count++;176 if(count
<
<<"->";177 else cout<
<
>numv;201 cout<<"input vertex(顶点):";202 for(i=1;i<=numv;i++)203 {204 cin>>v;205 insertvertex(v);206 }207 208 cout<<"input num(u,v)(弧的数目):";209 cin>>numv;210 211 for(i=1;i<=numv;i++)212 {213 cout<<"u->v:";214 cin>>u>>v;215 insertedge(u,v);216 }217 cout<

转载于:https://www.cnblogs.com/minmsy/p/5010701.html

你可能感兴趣的文章
【PAT】1029. Median (25)
查看>>
web项目的getContextPath()
查看>>
SpringMvc中两个Controller类之间传递参数的方法
查看>>
.NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(二)
查看>>
【WP7】转:Windows Phone 7 开发 31 日谈 目录
查看>>
6. datasource - mysql【从零开始学Spring Boot】
查看>>
编写病毒程序取款700余万,华夏银行一技术处长被捕受审
查看>>
阿里成立达摩院做基础科研 这是一家被电商掩盖的科技公司
查看>>
iPhone X降价跌破天际,国内网友:不在乎!
查看>>
商贩被保安打死?警方:初步认定系其自身疾病所致
查看>>
澳洲网:中国留学生成“香饽饽” 受澳顶尖高校青睐
查看>>
鄱阳湖上的“高空杂技人”
查看>>
甘肃宕昌中药材“入方”饲料 “药香鸡”山外飘香助脱贫
查看>>
郑杨:上交所设立科创板工作正稳步推进 “沪伦通”年内启动
查看>>
苏索轰世界波 米兰2:0热那亚重返意甲前四
查看>>
中瑞创新产业中心在杭揭牌 千万补助推动科技创新交流
查看>>
辽宁经济走出最困难时期 GDP增速稳中有进
查看>>
程序员牛人专访0012期|陪伴是对开发最长情的信任
查看>>
芝加哥略影 邂逅芝加哥!
查看>>
体素科技:2018年,算法驱动下的医学影像分析进展
查看>>