东北大学——考研初试——计算机842——图非编程题

图的定义

  • 有向图、无向图
  • 弧、边、顶点
  • 简单图
    • 不存在重复边
    • 不存在顶点到自身的边
  • 完全图
    • 有向图 n个顶点,n(n - 1) 个弧
    • 无向图 n个顶点,n(n - 1)/2 个边
  • 连通、连通分量、连通图
    无向图
    • 连通:存在i到j的路径
    • 连通分量:任意两点连通
    • 连通图:图内任意两点连通
  • 强连通、强连通分量、强连通图
    有向图
    • 强连通:存在i到j的路径
    • 强连通分量:任意两点连通
    • 强连通图:图内任意两点连通
  • 生成树、生成森林
    • 生成树:极小连通子图
  • 顶点的度、入度和出度
    • 有向图,入度、出度
    • 无向图、度
  • 权、网
    • 权:弧或边带有数组的意义
    • 网:带权图
  • 路径、路径长度、距离
    • 路径:点序列
    • 路径长度:边数
    • 距离:两点之间最短路径长度,不存在就是 无穷
  • 简单路径、简单回路
    • 简单路径:没有重复点的路径
    • 简单回路:除了头尾顶点相等,没有重复

画邻接表、逆邻接表

  1. 先画结点列表
  2. 根据弧头画边结点

画邻接矩阵

  1. 画n*n的二维数组
  2. edge[i][j]的值,没距离 就是无穷。

画十字链表

  1. 先画结点列表
  2. 根据弧头和弧尾,画弧结点,放在对应位置
  3. firstout,tlink串在一起
  4. fristin,hlink串在一起

图的深度优先遍历、广度优先遍历

写出图的强连通分量

写出i到j的简单路径

最小生成树(我的记忆方法是:pk)

经常把普利姆与克鲁斯卡尔搞混,我的记忆方法是:P点

  • 普利姆(Prim)(加点法)
  • 卡鲁斯卡尔(Kruskal)(加边法)

最短路径(我的记忆方法是:df)

经常把迪杰斯特拉与弗洛伊德搞混,我的记忆方法是:D点

  • 迪杰斯特拉(Dijkstra)
    • 只能求某点到其它点的最短路径
    • 不能有负边
    • 三个数组,dist[] path[] in[]
  • 弗洛伊德(Floyd)
    • 可以得到任意点之间的最短路径

    • 空间复杂度高 o(|v|^3):三层循环

    • 可以有负边,但它不能再回路中

    • 两个二维数组,A_k[], Path_k[]

      for(int k = 0; k < |v|; ++k) {
          for(int i = 0; i < |v|; ++i) {
              for(int j = 0; j < |v|; ++j) {
                  if(A[i][j] > A[i][k] + A[k][j]) {
                      A[i][j] = A[i][k] + A[k][j];
                      Path[i][j] = k;
                  }
              }
          }
      }
      

拓扑排序

  1. 画图
  2. 从入度为0的结点入手,删除

关键路径

是AOV网络中从源点到汇点的最长路径

  1. 先拓扑排序
  2. 按照拓扑序列算,点数值最大
  3. 按照逆拓扑序列,点数值最小
  4. 弧的数值等于2所得弧尾的数值
  5. 弧的数值等于3所得弧头的数值减去弧的权值
  6. 每段弧,5减4,等0的,就是关键路径

检查图有没有环的方法

  • 拓扑排序,排序后还剩下结点没有排
  • 深度优先遍历,遍历到自己

特别的题

  • 图的连通分量们的生成树的森林的孩子兄弟表示法的树
  • 用邻接矩阵表示的n个定点的无向图与有向图,图有多少条边,任意i和j是否有边相连,任意一个顶点的度是多少?
  • 说明深度优先能否实现拓扑排序 1次 07年2题
    • 可以,后序深度优先所得序列,再颠倒序列。

你可能感兴趣的:(东北大学——考研初试——计算机842——图非编程题)