图通常以一个二元组 G=
若图G中的每条边都是没有方向的,称为无向图;每条边是由两个节点组成的无序对,例如节点V1和节点V2之间的边,记为(V1, V2)
![无向图](https://img-blog.csdnimg.cn/7a120abfeaac447681c3d703b3251f06.jpeg#pic_center
若图G中的每条边都是有方向的,称为有向图;有向边也称为弧,每条弧是有两个节点组成的有序对,例如节点V1和节点V2之间的弧,记为
握手定理:所有节点的度数之和等于边数的两倍。
邻接表是图的一种链式存储结构,包括两部分:节点和邻接点。
邻接点结构
struct LinkNode {
int nodeIndex; // 节点下标
// int weight; // 路径上有不同权重,可以使用
LinkNode *next; // 下一个邻接点
};
节点
struct Node {
char ch; // 节点名称,假定为单字符
LinkNode *first; // 第一个邻接点
}
节点数组
Node nodes[26]; // 26个字符
广度优先搜索(Breadth First Search, BFS),又称为宽度优先搜索。即从某个节点(源点)出发,优先访问该节点的所有未被访问的邻接点,再依次从这些被访问的点出发,一层一层的访问,直到访问节点均已访问。如存储的示例图,访问顺序如下
深度优先搜索(Depth First Search, DFS)。即优先沿着一条路径搜索,直到当前节点无未被访问的邻接点,则退回到上一个节点,继续访问其未被访问的邻接点,直到所有点均已访问。如存储的示例图,访问顺序如下
参考《算法训练营》