Graphs
Graphs
一个图由一组点V组成,这些点称为顶点或节点,以及一组边E,也称为弧,每条边都包含一对顶点。
G=(V, E)
无向图:
V={v 1 , v 2 , v 3 , v 4 , v 5 , v 6 , v 7 }
E={
{v 1 , v 2 }, {v 1 , v 4 }, {v 2 , v 3 }, {v 4 , v 5 }, {v 4 , v 7 },{v 5 , v 6 }, {v 5 , v 7 } , {v 6 , v 7 }}
有向图:
E={(v 1 , v 2 ), (v 1 , v 4 ), (v 2 , v 3 ), (v 4 , v 1 ), {v 4 , v 5 }, (v 5 , v 7 ), (v 6 , v 5 ) , (v 7 , v 4 ), (v 7 , v 5 )}
计算机中表示图形的最佳方法取决于如何使用图形。
最明显的表示方式
——顶点数组和边数组
它们可能是最糟糕的表示方式。
两种常见的表示形式是:
- 邻接表 (Adjacency List)
- 邻接矩阵 (邻接矩阵)
Adjacency Lists
邻接表 L 是一个有长度 |V| 的数组(或哈希表),其中存储在 li 中的列表由顶点 i 直接到达的所有顶点组成。
Adjacency Matrix
邻接矩阵是一个|V|×|V|包含0和1的数组。
如果vi和vj之间没有边,则0存储在location (i, j)中。
如果vi和vj之间有一条边,则1存储在location (i, j)中。
如果G是一个无向图,则该数组是对称的,即 a(i, j)=a(j, i).
看以看到左边矩阵的横纵坐标分别表示v1-v7,有边为1,无边则为0.
Graph Search
这涉及到以某种系统的方式“探索”图,从顶点开始,然后通过从一个顶点到下一个顶点的边来访问其他可到达的顶点。
广度优先搜索(BFS)
我们的目标是列出从某个起始节点s∈V通过接下来的边可到达的所有顶点。
Breadth-First Search:
列出在0个移动中从s可到达的所有节点;
列出在一次移动中可以从s到达