用go语言实现一个构建有向图的函数,同时图结构的点和边上都支持添加属性

这篇具有很好参考价值的文章主要介绍了用go语言实现一个构建有向图的函数,同时图结构的点和边上都支持添加属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当然可以。下面是一个简单的用Go语言实现的有向图构建函数的示例。这个图结构使用map来存储,每个节点都由一个唯一的标识符(id)表示,并且节点和边都可以附加属性。

go

package main  
  
import (  
 "fmt"  
)  
  
// 定义节点结构体  
type Node struct {  
 ID       string  
 Attributes map[string]interface{}  
}  
  
// 定义边结构体  
type Edge struct {  
 Source, Target string  
 Attributes      map[string]interface{}  
}  
  
// 定义有向图结构体  
type DirectedGraph struct {  
 Nodes  map[string]*Node  
 Edges  map[string]*Edge  
}  
  
// 创建一个新的有向图  
func NewDirectedGraph() *DirectedGraph {  
 return &DirectedGraph{  
 Nodes: make(map[string]*Node),  
 Edges: make(map[string]*Edge),  
 }  
}  
  
// 添加节点到图中  
func (g *DirectedGraph) AddNode(id string, attributes map[string]interface{}) {  
 if _, ok := g.Nodes[id]; !ok {  
 g.Nodes[id] = &Node{ID: id, Attributes: attributes}  
 } else {  
 fmt.Printf("节点 %s 已存在.\n", id)  
 }  
}  
  
// 添加边到图中  
func (g *DirectedGraph) AddEdge(source, target string, attributes map[string]interface{}) {  
 if _, ok := g.Edges[source]; !ok {  
 g.Edges[source] = &Edge{Source: source, Target: target, Attributes: attributes}  
 } else {  
 fmt.Printf("边 %s-%s 已存在.\n", source, target)  
 }  
}  
  
// 打印图中的节点和边及其属性  
func (g *DirectedGraph) PrintGraph() {  
 for id, node := range g.Nodes {  
 fmt.Printf("节点 %s: %+v\n", id, node.Attributes)  
 }  
 for source, edge := range g.Edges {  
 fmt.Printf("边 %s-%s: %+v\n", source, edge.Target, edge.Attributes)  
 }  
}  
  
func main() {  
 graph := NewDirectedGraph()  
 graph.AddNode("A", map[string]interface{}{"color": "red"}) // 添加节点 A,属性为 color: red  
 graph.AddNode("B", map[string]interface{}{"color": "blue"}) // 添加节点 B,属性为 color: blue  
 graph.AddEdge("A", "B", map[string]interface{}{"weight": 2}) // 添加从 A 到 B 的边,属性为 weight: 2  
 graph.PrintGraph() // 打印图中的节点和边及其属性  
}

这个示例代码创建了一个有向图,并添加了两个节点(A和B)和一个从A到B的边。每个节点和边都有附加的属性(例如颜色和重量)。最后,通过调用PrintGraph函数,可以打印出图中的所有节点和边及其属性。文章来源地址https://www.toymoban.com/news/detail-808155.html

到了这里,关于用go语言实现一个构建有向图的函数,同时图结构的点和边上都支持添加属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 有向图的强连通分量

    对于一个有向图,连通分量:对于分量中任意两点u,v,必然可以从u走到v,且从v走到u. 强连通分量:极大连通分量。 求出强连通分量后,可以通过将强连通分量缩点的方式,将有向图转化成有向无环图。 求强连通分量的方法:tarjan O(n+m),时间复杂度是线性的 1 . 采用dfs来遍历整

    2024年02月10日
    浏览(39)
  • 公开游戏、基于有向图的游戏

    目录 〇,背景 一,公开游戏、策梅洛定理 1,公开游戏 2,策梅洛定理 3,非有向图游戏的公开游戏 力扣 486. 预测赢家(区间DP) 力扣 877. 石子游戏(退化贪心) 力扣 1140. 石子游戏 II(二维DP) 力扣 1406. 石子游戏 III(数列DP) 力扣 1563. 石子游戏 V(区间DP)  力扣 1686.

    2024年02月09日
    浏览(44)
  • 有向图的强连通分量算法

    有向图的强连通分量算法 强连通分量定义 在有向图中,某个子集中的顶点可以直接或者间接互相可达,那么这个子集就是此有向图的一个强连通分量,值得注意的是,一旦某个节点划分为特定的强连通分量后,此顶点不能在其它子树中重复使用,隐含了图的遍历过程和极大

    2024年02月06日
    浏览(84)
  • 真题详解(有向图)-软件设计(六十二)

    真题详解(极限编程)-软件设计(六十一) https://blog.csdn.net/ke1ying/article/details/130435971 CMM指软件成熟度模型,一般1级成熟度最低,5级成熟度最高,采用更高级的CMM模型可以提高软件质量。 初始:杂乱无章。 可重复级:建立基本的项目管理过程和跟踪费用项。 已定义(确定)

    2024年02月01日
    浏览(63)
  • 2023-04-09 有向图及相关算法

    有向图的的应用场景 社交网络中的关注 互联网连接 程序模块的引用 任务调度 学习计划 食物链 论文引用 无向图是特殊的有向图,即每条边都是双向的 改进Graph和WeightedGraph类使之支持有向图 Graph类的改动 WeightedGraph类的改动 有些问题,在有向图中不存在,或者我们通常不考

    2024年02月05日
    浏览(46)
  • 2023-8-29 有向图的拓扑排序

    题目链接:有向图的拓扑排序

    2024年02月11日
    浏览(36)
  • 搜索与图论-有向图的拓扑序列

    有向图的拓扑序列就是图的广度优先遍历的一个应用。 若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个 拓扑序列 。(起点在终点的前面) 拓扑序列是针对有向图,无向图是没有拓扑序列的。 有向无环图一定是

    2024年02月01日
    浏览(43)
  • 使用颜色检测有向图中的循环

    给定一个有向图,检查该图是否包含循环。如果给定的图形至少包含一个循环,您的函数应返回 true,否则返回 false。 例子:   输入:  n = 4, e = 6  0 - 1, 0 - 2, 1 - 2, 2 - 0, 2 - 3, 3 - 3  输出: 是  解释:    

    2024年02月03日
    浏览(44)
  • 有向图的邻接表和邻接矩阵

    有向图的邻接表是一种常用的表示方法,用于表示图中各个节点之间的关系。在有向图中,每条边都有一个方向,因此邻接表中的每个节点记录了该节点指向的其他节点。 具体来说,有向图的邻接表由一个由节点和它们的邻居节点列表组成的集合构成。对于每个节点,邻接表

    2024年02月22日
    浏览(40)
  • 二十一、搜索与图论——拓扑序列(有向图)

    拓扑序列定义: 若一个由图中所有点构成的序列 A满足:对于图中的每条边 (x,y),x在 A中都出现在 y之前,则称 A是该图的一个拓扑序列。 人话: 始终满足每条边的起点在终点前面,从前指向后。 注意:如果在有向图中构成一个环,则必定无法构成拓扑结构,也可以证明有向

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包