【发布时间】:2022-01-13 19:51:45
【问题描述】:
我知道这是一个更多关于逻辑而不是实际编程问题的问题,但我希望有人可以指导我找到正确的方向来解决这个问题。看看它就像降临编程谜题:)
我有节点,它们通过端口相互连接。我知道节点,我知道所有的关系。现在我需要获取所有可能的网络。
为了进一步阐明我的需要,我制作了以下草稿: 网络布局图:https://ibb.co/51zmkfj
传说:
- A-F:节点
- 1-5:关系
- 6:冗余关系(如果节点 D 是 乱序)
- I-IV:我需要进入列表的网络(每个节点的所有节点 网络,因此一个节点可以在多个网络中)
- V:冗余网络,我必须在一个单独的 列表(包含源节点和目标节点)
请注意,网络可以更大,并且可能有多个冗余网络
正如所写,我需要这些网络 I-V。我尝试了各种方法,得到了一个适用于 I-IV 的版本,但它的代码很多,而且我可能想太多了。
我的做法:
- 循环遍历关系并创建一个
Dictionary<int, List<String>>,其具有随机的 int 标识符和 id+portNumber 作为所有相互连接的关系的唯一字符串。 - 然后,我使用 Dictionary 执行嵌套 foreach 以将每个条目与其他条目进行比较,以查找任何重复项和不完整的组。
- 然后我从字典中删除这些错误的组。
- 之后,我从字典列表中的所有值中删除了 portNumber。
我还制作了一个 .NET Fiddle,它使用与上图完全相同的数据准备。 https://dotnetfiddle.net/SQnZYs
【问题讨论】:
-
你考虑过图形数据库吗?它是他们设计的问题类型,并且有一种查询语言可以帮助您解决此类问题而无需迭代代码docs.microsoft.com/en-us/azure/cosmos-db/graph/…
-
@TheGeneral 听起来不错,但对于我的用例来说这可能有点过头了,因为平均有 15-20 个节点将被连接,这对于大数据来说似乎很棒。我还需要一个为此运行的服务器,我想尽可能省略它。
标签: c# .net logic .net-fiddle