有向图、无向图、加权有向图

度,连接一个节点的边数。有向图有入度和出度。

关于图的连通性,无向图任何两个点都可以到达称为连通图。如果图看起来有两个部分,即有两个节点到不了,为非连通图。

强连通图是有向图的概念,有向图中任意两个节点可以到达。

图的构造。即如何用代码来实现一个图。

  • 邻接表、邻接矩阵

邻接矩阵用二维数组来表示图结构,有多少节点就申请多大的二维数组。如 grid[2][5] = 3 表示节点 2 和节点 5 连接,权值为 6。

这种表达方式(邻接矩阵) 在 边少,节点多的情况下,会导致申请过大的二维数组,造成空间浪费。

而且在寻找节点连接情况的时候,需要遍历整个矩阵,即 n * n 的时间复杂度,同样造成时间浪费。

邻接矩阵的优点

  • 表达方式简单,易于理解

  • 检查任意两个顶点间是否存在边的操作非常快

  • 适合稠密图,在边数接近顶点数平方的图中,邻接矩阵是一种空间效率较高的表示方法。

邻接表使用数组+链表来表示。

图的遍历,dfs,bfs。

有向图的遍历

图连接关系的表示

#include <stdio.h>

int *result; int result_len; / 结果的数量 */

int single_out; int single_len; / 单个结果,路径长度 */

int result_col_len; / 存放每个路径长度的数组 */

int node_total_num;

int *node_connect_nums;

void dfs(int **graph, int start_node) { // 当前节点已经是最后一个节点了 if (start_node == node_total_num) { //保存

}

int** allPathsSourceTarget(int** graph, int graphSize, int* graphColSize, int* returnSize, int** returnColumnSizes) {

}

int main() { int node_nums, route_nums; scanf("%d %d", &node_nums, &route_nums);

}

最后更新于