Graph_0_overview

  1. 图的实现: 邻接表和领接矩阵
  2. 图的遍历

图的实现: 邻接表和领接矩阵

邻接表的优势: 占用空间少, 避免了邻接矩阵里面的空的位置
邻接矩阵的优势: 查找 2 个节点之间的连通性更高效

// 邻接表: 存储连接邻居和链接邻居的权重
vector<vector<int>> graph;
vector<vector<int>> weight;

// 邻接矩阵
// 1.有向加权图, 记录x指向y边的权重, 0表示不相邻
// 2.无向图等于双向图
vector<vector<int>> matrix;

图的遍历

1.所有数据结构被发明出来无非就是为了遍历和访问, 所以遍历是所有数据结构的基础
2.图可以理解为多叉树的复杂版, 适用于树的dfs/bfs遍历基础方法全部适用于图; 图和多叉树遍历的区别在于: 图可能是包含环的, 如果图从一个节点遍历, 可能又会回到这个节点, 这样在遍历的时候就会无穷无尽; 树不存在这个情况; 如果图包含环, 那么遍历需要一个visited数组辅助, 这个visited数组表示当前节点已经被访问过
3.回顾多叉树是怎么遍历的

class TreeNode {
 public:
  int val;
  vector<Node*> children;
  TreeNode() {}
  TreeNode(int _val) {
    val = _val;
  }
  TreeNode(int _val, vector<TreeNode*> _children) {
    val = _val;
    children = _children;
  }
};
// 多叉树遍历框架
void traverse(TreeNode* root) {
  if (root == nullptr)
    return;
  for (TreeNode* child: root->children) {
    traverse(child);
  }
}

转载请注明来源, from goldandrabbit.github.io

💰

×

Help us with donation