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

转载于:https://www.cnblogs.com/alantu2018/p/8460832.html

数据结构与算法 - 图论相关推荐

  1. 数据结构与算法--图论-深度优先搜索及其应用

    深度优先搜索 深度优先搜索(depth-first search) 是对先序遍历(preorder traversal)的推广,我们从某个顶点v开始处理v,然后递归的遍历所有与v邻接顶点.如果这个过程 ...

  2. 数据结构与算法--图论最短路径算法应用-词阶求解

    最短路径案例 词梯应用,在一个词梯中,每个单词均由前一个单词改变一个字母而得到.例如,我们通过一系列单字母替换而得到zero转换为five,如下:five:zero,hero,here,hire,fi ...

  3. 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)

    文章目录 前言 邻接矩阵和邻接表 深度优先搜索(dfs) 宽度(广度)优先搜索(bfs) 总结与比较 前言 在有向图和无向图中,如果节点之间无权值或者权值相等,那么dfs和bfs时常出现在日常算法中. ...

  4. 数据结构与算法--B树原理及实现

    B树 前几篇文中讨论的数据结构我们都是假设所有的数据都存储在计算机的主存中.可说总要那么海量的数据需要通过个中数据结构去存储,我们不可能有这么多内存区存放这些数据.那么意味着我们需要将他们放磁盘.所以 ...

  5. 数据结构实验之图论四:迷宫探索_迷宫搜索类的双向bfs问题(例题详解)

    前言 文章若有疏忽还请指正! 更多精彩还请关注公众号:bigsai 头条号:一直码农一直爽 在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,bfs找最短次数等等题目的问 ...

  6. 七桥问题c语言程序数据结构,数据结构与算法学习——图论

    什么是图? 在计算机程序设计中,图结构也是一种非常常见的数据结构 但是图论其实是一个非常大的话题 图结构是一种与树结构有些相似的数据结构 图论是数学的一个分支,并且在数学概念上,树是图的一种 它以图为 ...

  7. c - 数据结构实验之图论三:判断可达性_IT世界的诡异事件,2020为何算法和数据结构面试题会如此火爆?...

    只有熟练掌握基础的数据结构与算法,才能对复杂问题迎刃有余. 很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试!为什么? 你在提前准备复习的时候,在网上找了半天相应题目的分析文章 ...

  8. Java job interview:算法的经典与数据结构的程序图论

    ●递推法 ●递归法 ●穷举法 ●贪心算法 ●分治法 ●动态规划法 ●迭代法 ●分支界限法 ●回溯法 ●费式数列 ●巴斯卡三角形 ●老鼠走迷宫 ●骑士走棋盘 ●八个皇后 ●八枚银币 ●生命游戏 ●字符串 ...

  9. SDUT--OJ《数据结构与算法》实践能力专题训练6 图论

    A - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历 Description 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列.(同一个结点 ...

  10. 数据结构与算法A实验六图论---7-11 邻接表创建无向图

    采用邻接表创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一个字符表 ...

最新文章

  1. 2017年中国人工智能产业最全研究报告发布 | AI世界2018年八大趋势
  2. python分几种_python有几种类型?
  3. 哈希表(HASHTABLE)
  4. JSR380(Bean Validation 2.0)
  5. CC2538相关资料
  6. c++ map初始化同时赋值_Golang学习笔记五--map
  7. c++primer12.3文本查询程序的一些问题的感悟和错误剖析
  8. webpack打包---报错内存溢出javaScript heap out of memory
  9. 【资源】斯坦福李飞飞高徒Johnson博士论文: 组成式计算机视觉智能(附195页PDF)
  10. C++11/14::右值引用
  11. 万能险被保监会叫停 安全投资理财大旗它将接手
  12. 模拟iic和硬件iic区别_技术货:IIC总线的FPGA实现
  13. PHP 和 AJAX MySQL 数据库实例
  14. Ubuntu修改hosts文件
  15. 图片放大后模糊怎么变清晰?
  16. 关于网页点击按钮无响应问题分析
  17. 从vc6.0转到vs2005 2008等出现的错误详解(HYD整理)
  18. web服务器攻击与防御系统设计,网络安全-Web的入侵防御系统的设计与实现
  19. LabVIEW使用VI Server的时候出现1003错误
  20. (附源码)计算机毕业设计SSM旅游足迹分享系统

热门文章

  1. Atitit 文件远程传输读写协议 scp http ftp nfs webdav smb D:\Program Files\Git\usr\bin\scp.exe 4.密码安全策略不完善 在
  2. Atitit 编程语言常用算法attilax总结
  3. paip.验证码识别---图像处理类库
  4. paip.html 及css调试工具---debugbar
  5. paip.ASP加密新总结
  6. [译]Rust返回引用的不同策略
  7. 连续 3 年支撑双 11,阿里云神龙如何扛住全球流量洪峰?
  8. 三年磨一剑,钉的真好听 | 凌云时刻
  9. delphi 如何判断 socket 连接成功_Linux下的C++ socket编程实例
  10. 【路径规划】基于matlab自动化拣货最优路径【含Matlab源码 1713期】