美文网首页Go Rookie程序员
菜鸟算法-图的邻接表表示法

菜鸟算法-图的邻接表表示法

作者: 甚了 | 来源:发表于2016-11-27 18:19 被阅读726次

图的邻接表

上图中有4个顶点5条边:

起始顶点 目标顶点 权值 边编号
A B 9 1
D C 8 2
A B 5 3
B D 6 4
A C 7 5

邻接表

这里用数组来实现邻接表:

邻接表
  • U V W : U[i]->V[i] 权值为 W[i], 边编号为 i;
  • first: first[i] 表示 i(A, B, C, D)号顶点的第一条边;
  • next : next[i] 表示 i(1,2,3,4,5)号边的下一条边;

构建邻接表

看图不说话

1.png 2.png 3.png 4.png 5.png
// 顶点编号:0,1,2,3 表示顶点 A,B,C,D
// 边编号:0,1,2,3,4
var u = [5]int{0, 3, 0, 1, 0}
var v = [5]int{3, 2, 1, 3, 2}
var w = [5]int{9, 8, 5, 6, 7}

func AdjacencyList() ([4]int, [5]int) {

        for i := 0; i < 5; i++ {
                fmt.Println(u[i], " -> ", v[i], " ", w[i])
        }

        first := [4]int{-1, -1, -1, -1}
        next := [5]int{-1, -1, -1, -1, -1}

        fmt.Println("fisrt : ", first)
        fmt.Println("next: ", next)
        fmt.Println("-----------------------")

        // 遍历5条边
        for i := 0; i < 5; i++ {
                next[i] = first[u[i]] // 将第i条边的下一条边设置为 u[i]号顶点的当前第一条边
                first[u[i]] = i       // 将u[i]号顶点的第一条边设置为当前边
        }

        fmt.Println("first: ", first)
        fmt.Println("next: ", next)

        return first, next
}


结果

邻接表存储图的空间复杂度是O(M) (M边数),查找的时间复杂度也 为O(M)

遍历顶点的出边:

func TraverseEdge(point int, first [4]int, next [5]int) {
        k := first[point]
        for -1 != k {
                fmt.Println(u[k], " -> ", v[k], " ", w[k])
                k = next[k]
        }
}

相关文章

  • 邻接表及其实现

    图的邻接表表示法类似于树的孩子链表表示法。 编辑文件信息 打印邻接表。

  • 菜鸟算法-图的邻接表表示法

    图的邻接表 上图中有4个顶点5条边: 邻接表 这里用数组来实现邻接表: U V W : U[i]->V[i] 权值...

  • 图和树

    图 图的两种表示方法:邻接表和邻接矩阵,既可以表示有向图,也可以表示无向图 通常使用邻接表表示法,这种方法表示稀疏...

  • 算法

    1.图的存储结构 邻接矩阵表示法 便于运算邻接表表示法 对于稀疏图来讲,更节省存储空间十字链表邻接多重表 ...

  • Leetcode 存档点(1)-- 课程表II

    课程表II 这道题的基本思想是和拓扑排序相关联的,属于一个图的问题 图的存储结构 邻接矩阵表示法 邻接表表示法 拓...

  • 图 - Graph

    基本概念 边(Edge) 顶点(Vertex) 度(Degree) 图的表示邻接矩阵:用来表示稠密图邻接表:表示稀...

  • 图基础知识整理和代码实现

    介绍图的基本概念和术语。介绍邻接矩阵和邻接表两种图的表示方法。介绍图的广度和深度优先搜索算法。贡献作者自己实现的图...

  • 图的表示-邻接矩阵与邻接表代码实现(2)

    由上篇图--图论基础(1) - 简书可知,邻接表适合表示稀疏图,邻接矩阵适合表示稠密图。 接下来我们用Java来表...

  • 图的表示和存储结构

    图的表示:两种表示方法 邻接矩阵和邻接表 无向图 有向图 图的权 连通图 度 图的存储结构 1、邻接矩阵存储 浪...

  • 图论基础

    图的表示有两种: 邻接矩阵(Adjacency Matrix)和邻接表(Adjacency Lists) 1、邻接...

网友评论

    本文标题:菜鸟算法-图的邻接表表示法

    本文链接:https://www.haomeiwen.com/subject/yxdnpttx.html