阿尔法贝塔阀原理_图总结 - 阿尔法个贝塔 - 博客园
一.思维导图
二.概念笔记
图的存储结构
1. 邻接矩阵
定义:设图G有n (n大于等于1) 个顶点,则邻接矩阵是一个n阶方阵。
当矩阵中的 [i,j] !=0(下标从1开始) ,代表其对应的第i个顶点与第j个顶点是连接的
特点
无向图的邻接矩阵是对称矩阵,n个顶点的无向图需要n*(n+1)/2个空间大小
有向图的邻接矩阵不一定对称,n个顶点的有向图需要n²的存储空间
无向图中第i行的非零元素的个数为顶点Vi的度
有向图中第i行的非零元素的个数为顶点Vi的出度,第i列的非零元素的个数为顶点Vi的入度
2.邻接表
定义:为图G中的每一个顶点建立一个单链表,每条链表的结点元素为与该顶点连接的顶点
特点
无向图顶点Vi的度为第i个单链表中的结点数无向图中
顶点Vi的出度为第i个单链表中的结点个数
顶点Vi的入度为全部单链表中连接点域值是i的结点个数
图的遍历
深度优先遍历
图的深度优先遍历类似于树的前序遍历。先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点;当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直到所有的顶点都被访问。
广度优先遍历
图的广度优先遍历类似于树的层次遍历。从图中某顶点出发,依次访问各个邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,直至图中所有顶点都被访问到为止。
最小生成树
Prim算法
Prim算法首先以一个结点作为最小生成树的初始结点,然后以迭代的方式找出与最小生成树中各结点权重最小边,并加入到最小生成树中。加入之后如果产生回路则跳过这条边,选择下一个结点。直至所有结点都加入到最小生成树中。
Kruskal算法
Kruskal算法在找最小生成树结点之前,需要对所有权重边做从小到大排序。将排序好的权重边依次加入到最小生成树中,如果加入时产生回路就跳过这条边,加入下一条边。当所有结点都加入到最小生成树中之后,就找出了最小生成树。
Kruskal在算法效率上是比Prim快,因为Kruskal只需一次对权重的排序就能找到最小生成树,而Prim算法需要多次对邻边排序才能找到
最短路径
Dijkstra算法
Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
Floyd算法
Floyd算法是先找出最短的距离,然后在考虑如何找出对应的行进路线。
三.疑难问题
关于Dijkstra算法和Floyd算法的代码实现,从网上摘取两段代码理解
const int MAXINT = 32767;
const int MAXNUM = 10;
int dist[MAXNUM];
int prev[MAXNUM];
int A[MAXUNM][MAXNUM];
void Dijkstra(int v0)
{
bool S[MAXNUM]; // 判断是否已存入该点到S集合中
int n=MAXNUM;
for(int i=1; i<=n; ++i)
{
dist[i] = A[v0][i];
S[i] = false; // 初始都未用过该点
if(dist[i] == MAXINT)
prev[i] = -1;
else
prev[i] = v0;
}
dist[v0] = 0;
S[v0] = true;
for(int i=2; i<=n; i++)
{
int mindist = MAXINT;
int u = v0; // 找出当前未使用的点j的dist[j]最小值
for(int j=1; j<=n; ++j)
if((!S[j]) && dist[j]
{
u = j; // u保存当前邻接点中距离最小的点的号码
mindist = dist[j];
}
S[u] = true;
for(int j=1; j<=n; j++)
if((!S[j]) && A[u][j]
{
if(dist[u] + A[u][j] < dist[j]) //在通过新加入的u点路径找到离v0点更短的路径
{
dist[j] = dist[u] + A[u][j]; //更新dist
prev[j] = u; //记录前驱顶点
}
}
}
}
typedef struct
{
char vertex[VertexNum]; //顶点表
int edges[VertexNum][VertexNum]; //邻接矩阵,可看做边表
int n,e; //图中当前的顶点数和边数
}MGraph;
void Floyd(MGraph g)
{
int A[MAXV][MAXV];
int path[MAXV][MAXV];
int i,j,k,n=g.n;
for(i=0;i
for(j=0;j
{
A[i][j]=g.edges[i][j];
path[i][j]=-1;
}
for(k=0;k
{
for(i=0;i
for(j=0;j
if(A[i][j]>(A[i][k]+A[k][j]))
{
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
}
阿尔法贝塔阀原理_图总结 - 阿尔法个贝塔 - 博客园相关推荐
- webbrowser中localhost和发布的地址_发布一款android版博客园官方app
1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...
- 阿尔法贝塔阀原理_臭氧投加在污水处理中的应用_美国阿尔法Alpha
首页 > 新闻列表 > 正文 发布时间:2020-12-09 07:11:40 浏览: 77 导读:美国阿尔法Alpha为您提供臭氧投加在污水处理中的应用的相关知识与详情: 自动控制. 减 ...
- 阿尔法贝塔阀原理_α是阿尔法,β是贝塔,那接下去呢?
展开全部 1 Α α alpha a:lf 阿尔法 2 Β β beta bet 贝塔32313133353236313431303231363533e78988e69d833133336566626 ...
- 实现原理 扫描枪_扫描枪原理 - 企业信息化的利器---条形码 - 小组 - 博客园
丰富的生活随着彩色打印机的介入,老百姓的家庭变得更加多彩.近年来计算机技术的飞速发展,有些家庭有了更多的需求--扫描枪.它更是为家庭娱乐提供了新的融洽亲情的方式.在选择使用扫描枪前,先认识一下扫描枪. ...
- java费波拉切_面试题 - 不再犯错 - 博客园
js的基本类型有哪些?引用类型有哪些?null和undefined的区别. 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种) Object是引用类型嘛?引用类型和基 ...
- mysql是大端小端_大端和小端 - HackerVirus - 博客园
在计算机中是以字节为单位,每个地址对应一个字节,一个字节8bit.在C中,除了8bit的char以外,还有16bit的short,32位的int,64位long,当然具体要由编译器决定,可以通过siz ...
- java 雷达反射面积_毫米波雷达 - Magnum Programm Life - 博客园
微波是通信和雷达使用的主要频段, 300Mhz ~ 300GHz. 毫米波是微波的一个子频段. 可见光,红外,激光, 由于频率不同和微波的特性有很大差异. 不同频段的电磁波在 "反射, 吸 ...
- 触发器和java的关系_触发器-1 - java ee spring - 博客园
------------------------------------环境代码 create table student (stuid varchar2(10) not null, stuname ...
- python命令行运行模式_[Python] 命令行模式阅读博客园的博文
1 #-*- coding:UTF-8 -*- 2 importrequests3 from lxml importetree4 importsys5 importio6 importos7 8 9 ...
最新文章
- 大厂面试官必问的Mysql锁机制
- 【bzoj2081】[Poi2010]Beads Hash
- idea每次新建项目都要重新配置maven
- jQuery的Ajax方法
- 2016校招腾讯研发岗笔试题---递归法求解格雷码
- 【渝粤教育】广东开放大学 财政学 形成性考核 (43)
- 计算机怎么允许用户安装文件,如何禁止安装某个软件?电脑不允许安装软件的方法...
- Redis进阶-缓存问题
- 如果 GitHub 被中国互联网巨头收购会怎样?
- php mcrypt取消,准备在PHP 7.2中删除Mcrypt
- 看病要排队 (hdu1873,优先队列)
- matlab 警告(warning)、错误(error)、异常(exception)与断言(assert)
- 更新ADT20后无法创建Android项目
- 基于单片机的公交车系统
- W3School 离线手册最新版下载
- filezilla里怎么解决中文乱码
- 引擎系列学习【一】Color Model(颜色模型)
- 驰骋工作流-表单引擎- ccform
- C语言程序之经典习题:请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。
- python匹配问题
热门文章
- C语言用循环写出新年祝福语图案,非常漂亮的新年祝福!C语言实现漂亮的烟花效果...
- 【JSON系列】JSON核心知识点总结
- 使用七牛云对网站进行加速基本配置
- 掌握 React 与 React Native
- mysql 8.0认证失败_解决mysql8.0因密码认证插件导致的链接不上
- JS如何禁止别人查看网站源码
- vue-cli 3.0 使用全过程讲解
- 信息的Raid存储方式,更安全的保障,更花钱的保障!
- [Mac入门] 如果更快的打开程序或文件
- USACO 6.3 章节 你对搜索和剪枝一无所知QAQ