四时宝库

程序员的知识宝库

用Go语言实现的构建有向图的函数(有向图的创建算法)

以下是一个用Go语言实现的构建有向图的函数。在这个实现中,图由一个map组成,其中键是节点,值是该节点所连接的节点列表。同时,点和边上都可以添加属性。

go复制代码


package main




import (


"fmt"


)




// Edge 结构体表示有向图的边


type Edge struct {


To string // 边的终点


Attrs map[string]interface{} // 边属性


}




// Graph 结构体表示有向图


type Graph map[string][]Edge




// NewGraph 创建一个新的有向图


func NewGraph() Graph {


return make(map[string][]Edge)


}




// AddNode 添加一个节点到图中


func (g Graph) AddNode(name string) {


g[name] = []Edge{}


}




// AddEdge 添加一条边到图中


func (g Graph) AddEdge(from, to string, attrs map[string]interface{}) {


edge := Edge{To: to, Attrs: attrs}


g[from] = append(g[from], edge)


}




// PrintGraph 打印图的内容


func (g Graph) PrintGraph() {


for node, edges := range g {


fmt.Printf("Node: %s\n", node)


for _, edge := range edges {


fmt.Printf(" Edge to %s with attributes: %v\n", edge.To, edge.Attrs)


}


}


}




func main() {


graph := NewGraph()




// 添加节点和边


graph.AddNode("A")


graph.AddNode("B")


graph.AddNode("C")




graph.AddEdge("A", "B", map[string]interface{}{"weight": 2})


graph.AddEdge("A", "C", map[string]interface{}{"weight": 3})


graph.AddEdge("B", "C", map[string]interface{}{"weight": 4})




// 打印图的内容


graph.PrintGraph()


}

在这个例子中,我们创建了一个名为Edge的结构体来表示有向图的边,它包含一个To字段表示边的终点,以及一个Attrs字段表示边的属性。然后我们创建了一个名为Graph的结构体来表示有向图,它是一个map,键是节点的名字,值是该节点所连接的边的列表。AddNode方法用于添加一个节点到图中,AddEdge方法用于添加一条边到图中。最后,我们有一个PrintGraph方法用于打印图的内容。在main函数中,我们创建了一个新的图,添加了一些节点和边,然后打印了图的内容。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接