我在C#中制作一些简单的网络绘图软件(为了清楚起见,我将写'网络'而不是'图') . 网络最终可能在一些顶点/节点之间具有多个有向边 . 我已经为这个软件设计了如下数据结构:

  • 每个节点和边都有一个相应的'interactible'对象,用于确定可视化和处理输入,例如针对这些可见对象的点击 . 这些对象可以存储关于我选择的相应对象的任何数量的数据,并且现在它们包含边的 endpoints ,例如,以及每个对象的整数标识符 .

  • 节点(以及它们之间的边)被分成连接的组件 . 我想实现在添加边时合并这些组件的例程,并在删除边或节点时检测断开连接 .

  • 网络的整体数据,现在只需记录每对节点之间的边数,忽略方向,将在 INetwork 接口的实例中表示,该接口包含添加和删除节点和边缘的例程 . ,识别顶点的邻居,依此类推 .

那么,我的问题是如何实际实现这个 IMatrix 接口 . 实现可以随着图的稀疏性而变化,但我想知道在内存,处理速度等方面最有效的方法 .

更确切地说,我知道我可以为每个组件生成一个邻接矩阵,或者类似地为邻接列表生成一个邻接矩阵,但哪些类型最适合C#中的这些角色,请记住我的节点有整数标识符,我希望是最好留下恒定?

Dictionary<int,Dictionary<int,int>> 是否是实现邻接计数的好方法,以便能够有效地删除条目?给定节点索引时,一个大的二维数组会工作吗?如果我将矩阵存储为1-dim'l数组,比如说 int[] 用一些方法将其视为2维或3维数组,那么这会以任何有意义的方式更好吗?

当然,每个实现都有优点和缺点,但我希望最费力的例程总是能够检查边缘的删除是否导致网络断开连接 . 因此,我希望我使用的任何实现能够快速检查:

  • 删除的边是否是其顶点对之间的最后一条边 .
    _999_如果是,则能够连续快速地识别每个节点的邻居,以便识别哪些节点位于哪个结果组件中 .

提前感谢任何和所有建议 . 如果有人想知道,C#的选择是因为我依赖Unity游戏制作引擎来渲染和(可能在后来的)物理能力 .