Java数据结构与算法14——图(不带权)

1.图是什么

图是一种用来描述多对多结构关系的数据结构,图中的每个顶点元素,可以有零到多个直接前驱元素,也可以有零到多个直接后继元素。

图G由两个集合构成,记作G= (V, {A}) ,其中V是顶点的非空有限集合,A 是边的有限集合,其中边是顶点的无序或有序对(对应的图称为无向图或有向图)

现实生活中有很多都可以抽象成为图的结构,比如:
1)交通图:顶点—地点;边—连接地点的路
2)电路图:顶点—元件;边—连接元件之间的线路
3)通讯线路图:顶点—地点;边—地点间的连线
4)各种流程图:顶点—活动;边—各活动之间的顺序关系

2.图的基本术语

  • 1)邻接:如果两个顶点被同一条边连接,那么这两个顶点就是邻接的,这两个顶点可以被称为邻接点,连接的边可以称为关联边
  • 2)顶点的度:与顶点相关联的边的数目
  • 3)路径:边的序列
  • 4)无向图:边没有方向的图
  • 5)有向图:边有方向的图
  • 6)连通图:至少有一条路径可以把所有的顶点连接起来的图
  • 7)强连通图:任何两个顶点之间都存在连通路径的图
  • 8)入度和出度:有向图中,以某个顶点为起始(终止)的有向边数,成为该顶点的出度(入度)
  • 9)带权图:边被赋予一个权值的图
  • 10)有环图:指的是存在路径的起点和终点是同一个顶点的图。不包含环的图就是树,在图中,树的顶点可以连接任意数量的顶点。

3.在程序中表示图

  • 1)顶点:可以用一个对象来描述,要有一个识别码;多个顶点在图中,可以用一个顶点数组来表示
  • 2)边:可以用邻接矩阵或者是邻接表的方式来描述
  • 3)邻接矩阵:是一个二维数组,数据项表示两个顶点间是否存在边,如果有N个顶4点,那么邻接矩阵就是N*N的数组
  • 4)邻接表:是一个链表数组,每个单独的链表记录了有哪些顶点与当前顶点邻接 .图的搜索(遍历)

4.图的搜索,包括深度搜索和广度搜索,算法并代码示例

通常有两种搜索方法:深度优先和广度优先 .深度优先搜索

深度优先
通常使用栈来实现,基本步骤如下:

  • step1.访问一个邻接的未访问的顶点,把它压入栈中,并做标记,然后继续做这一步
  • step2.第一步结束,如果栈不为空,从栈中弹出一个顶点,然后重复第一步
  • step3.当最后栈中没有顶点了,那么搜索也就完成了

广度优先搜索
通常使用队列来实现,基本步骤如下:

  • step1.访问下一个将要访问的邻接顶点,把它放入队列中并做标记,然后继续这一步
  • step2.第一步结束,如果队列不为空,从队列头取出一个顶点,作为当前顶点,然后重复这两步
  • step3.当最后队列中没有顶点了,那么搜索也就完成了 .

5.最小生成树,算法并代码示例

包含图中所有顶点的最小连通子图称为图的最小生成树,如果在该子图中
删除任意一条边,子图将不再是连通的。

最小生成树有如下特性:
1.一棵n个顶点的最小生成树有且仅有足以构成树的n-1条边
2.若在一棵最小生成树上删除一条边,就不再连通
3.若在一棵最小生成树上添加一条边,必定构成一个环

创建最小生成树的算法和搜索算法是一样的,只不过需要记录走过的边。

6.有向图的拓扑顺序,算法并代码示例

有向图的拓扑排序指的就是将有向图中的顶点以线性方式进行排序,其步骤为:

  • step1.找到一个没有后继的顶点
  • step2.从图中删除这个顶点,在列表前面插入顶点的标记
  • step3.重复上述步骤,直到所有顶点都从图中删除,此时,列表显示的顶点顺序就是拓扑顺序注意:拓扑排序只能在有向无环图中进行

7.有向图的连通性,算法并代码示例

有向图的连通性有向图中一个有趣的问题是:从一个指定顶点出发,可以到达哪些顶点?

这个可以通过查看连通性表来得到,所谓连通性表,就是第一个是起点,后面就是这个顶点能到达的顶点了,简单的可以修改前面的程序得到。

8.Warshall算法并代码示例

解决问题的思路:如果我们修改原来的邻接矩阵,直接在上面标明一个顶
点是否可以到达另外一个顶点的话,就可以直接通过这个修改过的邻接矩阵来得到一个顶点能到达的顶点了。

这个修改过的邻接矩阵表示的图,就称为原图的传递闭包。Warshall算法就是用来把邻接矩阵转变成图的传递闭包的,步骤如下:

  • step1.使用一个三层嵌套循环,最外层循环每一行i,中间层循环列j
  • step2.如果(i,j)为1,表明有一条从i到j的边,就执行内层循环
  • step3.检查以i为列的每个单元k,如果(k,i)为1,表明有一条从k到i的边,进而推出存在一条从k到j的边,那么就可以设置(k,j)为1 4:如此循环完成,得到的新的邻接矩阵就是原图的传递闭包

参考

  • 1)Java数据结构和算法精讲版

你可能感兴趣的:(Java数据结构与算法14——图(不带权))