图总结
时间:2020-05-17
本文章向大家介绍图总结,主要包括图总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一.思维导图
二.重要概念
1.深度优先遍历(DFS)
类似于树的先根遍历
void DFSTraverse(MGraph G)
{
int v;
for( v = 0; v < G.vexnum; ++v) visited[v] = false;
for( v = 0; v < G.vexnum; )
if(!visited[v]) DFS( G, v);
++v;
}
2.广度优先遍历(BFS)
类似于树的层次遍历
void BFSTraverse(MGraph G)
{
Queue Q;
int u;
for(int m=1; m<= G.vexnum; m++) visited[m] = false;
InitQueue(Q);
for(int v=1;v<=G.vexnum;v++)
if(!visited[v]) {
visited[v]=true;
visitVex(G,v);
EnQueue(Q,v);
while(Q.len!=0)
{
DeleteQueue(Q,u);
for(int w=FirstAdjVex(G,u);w>=1;w=NextAdjVex(G,u,w))
if(!visited[w])
{
visited[w]=true;
visitVex(G,v);
EnQueue(Q,w);
}
}
}
cout<<endl;
}
3.普里姆算法与克鲁斯卡尔算法(求最小生成树)
普里姆算法从顶点的角度为出发点,时间复杂度为O(n^2),适合于解决稠密图;克鲁斯卡尔算法从边的角度出发,时间复杂度为O(nlogn),适合于解决稀疏图。
4.拓扑排序
用于判断一个有向图有无环,执行步骤为
(1) 选择一个入度为0的顶点并输出之;
(2) 从网中删除此顶点及所有出边。
直到不存在入度为0的顶点为止。
三.疑难问题及解决方法
1.问题:不理解拓扑排序
解决方法:熟知拓扑排序步骤
-
从DGA图中找到一个没有前驱的顶点输出。(可以遍历,也可以用优先队列维护)
-
删除以这个点为起点的边。(它的指向的边删除,为了找到下个没有前驱的顶点)
-
重复上述,直到最后一个顶点被输出。如果还有顶点未被输出,则说明有环!
例如以下有向无环图,求其拓扑排序序列
1.删除1或2输出
2.删除2或3以及对应的边
3.删除3或4以及对应的边
重复以上步骤得到最终拓扑排序序列为1 2 4 3 6 5 7 9(序列不唯一)
原文地址:https://www.cnblogs.com/20010816bb/p/12903985.html
- Selenium2+python自动化45-18种定位方法(find_elements)
- Python做文本挖掘的情感极性分析(基于情感词典的方法)
- Selenium2+python自动化42-判断元素(expected_conditions)
- 基于机器学习的文本情感极性分析
- Selenium2+python自动化43-判断title(title_is)
- hihoCoder #1142 : 三分求极值
- 容斥原理
- TensorFlow:TensorBoard可视化
- Codeforces 768B Code For 1
- 【干货】深入理解自编码器(附代码实现)
- SlopOne推荐算法(附Python源码)
- 后缀数组(一堆干货)
- POJ 1741 Tree(树的点分治,入门题)
- hihoCoder 1039:字符消除(字符串处理)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Sliding Window - 340. Longest Substring with At Most K Distinct Characters
- Sliding Window - 3. Longest Substring Without Repeating Characters
- Sliding Window - 30. Substring with Concatenation of All Words
- Sliding Window - 76. Minimum Window Substring
- GET和POST的区别
- String - 68. Text Justification
- String - 273. Integer to English Words
- String - 12. Integer to Roman
- Dynamic Programming - 62. Unique Paths
- Dynamic Programming - 70. Climbing Stairs
- LinkedList - 23. Merge k Sorted Lists
- LinkedList - 86. Partition List
- LinkedList - 148. Sort List
- LinkedList - 61. Rotate List
- LinkedList - 143. Reorder List