(8)图的实现方式,图的搜索算法有哪些——3

图的实现方式有两种:一种是邻接矩阵,一种是邻接链表。

图(Graph)是一个用线或边连接在一起的顶点或结点的集合。

G = (V,E)  //V:顶点,结点或点。E:边,弧或连线。

根据图的边是否有方向,可以把图分为有向图和无向图。

而根据图的边和顶点的关系又可以分为完全图和非完全图。完全图指的是n个顶点有n(n-1)/2条边的无向图。

无向图和有向图最常用的实现都是基于邻接的方式。即邻接矩阵邻接链表

邻接矩阵:

n个顶点的图G=(V,E),为n*n的矩阵A。A中的每个元素是0或1。由于无向图是没有方向的,因此矩阵中(n,m)和(m,n)的值都为1,所以无向图的邻接矩阵是对称的,在存储时可以进行压缩。

邻接链表:

图的邻接链表是作为链表保存的。

图的搜索指的是从一个给定的顶点开始,能够到达的顶点的集合。图的搜索算法主要有广度优先搜索和深度优先搜索。

图的搜索指的是从一个给定的顶点开始,访问能够达到的顶点。

广度优先遍历(BFS)

(1)从某个顶点V出发,访问该顶点的所有邻接点V1,V2..VN

(2)从邻接点V1,V2...VN出发,再访问他们各自的所有邻接点

(3)重复上述步骤,直到所有的顶点都被访问过

.深度优先遍历(DFS)

(1)从某个顶点V出发,访问顶点并标记为已访问

(2)访问V的邻接点,如果没有访问过,访问该顶点并标记为已访问,然后再访问该顶点的邻接点,递归执行。

如果该顶点已访问过,退回上一个顶点,再检查该顶点的邻接点是否都被访问过,如果有没有访问过的继续向下访问,如果全部都访问过继续退回到上一个顶点,继续同样的步骤。

——整理自《C/C++程序员·面试宝典》

原文地址:https://www.cnblogs.com/thunder-wu/p/6670209.html