Java-图

基本概念

图:包含由边连接的节点,通常是有一个固定的形状;从数学意义上说,树是图的一种;图可以表示许多真实世界的情况。

邻接:若两个顶点被同一条边连接,则这两个顶点是邻接的。

路径:边的序列。

连通图:至少有一条路径可以连接起所有的顶点。

有向图:边是有方向的。

带权图:边被赋予一个权值。

表示边的两种方法:邻接矩阵和邻接表。

邻接矩阵:是一个二维数组,数据项表示两点间是否存在边。若图有N个顶点,邻接矩阵就是N*N数组。

邻接表:是一个链表数组,表示当前顶点与哪些顶点连接,即两顶点间存在边而不是表示顶点间的路径。对于大型稀疏图可用邻接表表示。

搜索

搜索算法以一种系统的方式访问图中的每个顶点,搜索是其他行为的基础。

深度优先搜索(DFS)

通过栈实现,从起始顶点出发访问下一个顶点时,就把该顶点入栈,回到起始点时,出栈。

关键:能够找到与某一顶点邻接且没有访问过的顶点。

游戏仿真

广度优先搜索(BFS)

通过队列实现,先访问起始顶点的所有邻接点,再访问较远的区域。

最小生成树(MST)包含连接图中所有顶点所需要的最少数量的边。

最小生成树

其边E的数量总比顶点V的数量小1:E = V - 1。

不带权图中,可通过简单修改深度优先搜索算法来生成它的最小生成树。因为深度优先算法访问所有顶点但只访问一次。

有向图的拓扑排序

有向图即边有方向。

拓扑排序算法创建这样一个顶点排序:若A到B有一条边,那么在列表中顶点A在B的前面。拓扑排序只能在有向无环图(DAG)中执行。其典型应用是复杂项目的调度,包含了任务和任务之间的前后关系。

环:路径的起点和终点都是同一个顶点。

若一N个顶点的图有超过N-1条边,则其必定有环。

不包含环的图叫做树。

带权图

边赋予一个权值,它可以代表距离、耗费、时间等。

带权图的最小生成树:有所有顶点和连接它们的必要的边,且这些边的权值最小。可通过优先级队列算法来寻找带权图的最小生成树。

最短路径

带权图的最短路径问题是要找到路径总权值最小。可以用Dijkstra算法解决。

无权图的最短路径问题是要找到两点间路径,且路径长度最短。

 

posted @ 2021-05-03 13:31  Xiarsu  阅读(78)  评论(0)    收藏  举报