在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、依赖关系分析等场景。今天,我们将用Go语言来实现图的一种经典表示方法——邻接矩阵。无论你是编程小白还是有一定经验的开发者,这篇教程都将帮助你轻松掌握Go语言图的邻接矩阵表示法。
图由顶点(Vertex)和边(Edge)组成。顶点代表对象,边代表对象之间的关系。图可以是有向的(边有方向)或无向的(边无方向)。
邻接矩阵是一种用二维数组来表示图中顶点之间连接关系的方法。假设图中有 n 个顶点,那么我们就创建一个 n × n 的矩阵 matrix:
i 和顶点 j 之间有边,则 matrix[i][j] = 1(或边的权重)matrix[i][j] = 0
下面我们用 Go 语言一步步实现一个无向图的邻接矩阵表示。
type Graph struct { vertices int // 顶点数量 matrix [][]int // 邻接矩阵} func NewGraph(vertices int) *Graph { // 初始化一个 vertices × vertices 的二维切片 matrix := make([][]int, vertices) for i := range matrix { matrix[i] = make([]int, vertices) } return &Graph{ vertices: vertices, matrix: matrix, }} // AddEdge 添加一条无向边func (g *Graph) AddEdge(v1, v2 int) { if v1 < g.vertices && v2 < g.vertices { g.matrix[v1][v2] = 1 g.matrix[v2][v1] = 1 // 无向图:对称 }} func (g *Graph) PrintMatrix() { for i := 0; i < g.vertices; i++ { for j := 0; j < g.vertices; j++ { fmt.Printf("%d ", g.matrix[i][j]) } fmt.Println() }} package mainimport "fmt"type Graph struct { vertices int matrix [][]int}func NewGraph(vertices int) *Graph { matrix := make([][]int, vertices) for i := range matrix { matrix[i] = make([]int, vertices) } return &Graph{vertices: vertices, matrix: matrix}}func (g *Graph) AddEdge(v1, v2 int) { if v1 < g.vertices && v2 < g.vertices { g.matrix[v1][v2] = 1 g.matrix[v2][v1] = 1 }}func (g *Graph) PrintMatrix() { for i := 0; i < g.vertices; i++ { for j := 0; j < g.vertices; j++ { fmt.Printf("%d ", g.matrix[i][j]) } fmt.Println() }}func main() { g := NewGraph(4) // 创建包含4个顶点的图 g.AddEdge(0, 1) g.AddEdge(0, 2) g.AddEdge(1, 2) g.AddEdge(2, 3) fmt.Println("邻接矩阵表示:") g.PrintMatrix()} 运行上述代码,输出如下:
邻接矩阵表示:0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0
优点:
缺点:
通过本教程,我们学习了如何在 Go语言 中使用 邻接矩阵 来表示图。这是理解 图数据结构Go实现 的重要一步。虽然邻接矩阵在稀疏图中效率不高,但它在稠密图或需要频繁判断边是否存在时非常有用。
如果你正在学习 Go语言数据结构教程,建议你也尝试实现 邻接表 表示法,它在大多数实际应用中更节省空间。
希望这篇关于 Go语言图的邻接矩阵 的教程对你有所帮助!动手写一写代码,你会理解得更深刻。
本文由主机测评网于2025-12-21发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210953.html