获取连接节点的所有网络(逻辑谜题)
Get all networks of connected nodes (Logic puzzle)
我知道这是一个逻辑问题,而不是实际的编程问题,但我希望有人可以指导我朝着正确的方向解决这个问题。看它就像出现编程谜语:)
我有节点,它们通过端口相互连接。我知道节点,也知道所有关系。现在我需要获取所有可能的网络。
为了进一步明确我的需求,我做了如下草稿:
网络布局图:https://ibb.co/51zmkfj
图例:
- A-F:节点
- 1-5:关系
- 6:冗余关系(如果节点D是
乱序)
- I-IV:我需要进入列表的网络(每个节点的所有节点
网络,因此一个节点可以在多个网络中)
- V:冗余网络,我必须单独获取
列表(包含源节点和目标节点)
请注意,网络可能会更大,并且这些冗余网络可能不止一个
正如所写,我需要这些网络 I-V。我尝试了各种方法并得到了一个适用于 I-IV 的版本,但它有很多代码,我可能对整个事情想得太多了。
我的做法:
- 遍历关系并创建一个
Dictionary<int, List<String>>
具有随机 int 标识符和 id+portNumber 作为相互连接的所有关系的唯一字符串。
- 然后我对字典执行嵌套 foreach,将每个条目与其他条目进行比较,以查找任何重复项和不完整的组。
- 然后我从词典中删除这些错误的组。
- 之后,我从字典列表中的所有值中删除了 portNumber。
我还制作了一个 .NET Fiddle,它使用与上图完全相同的数据准备。
https://dotnetfiddle.net/SQnZYs
作为有一点网络经验的人,我首先要指出的是,您不能像那样将多根电缆插入同一个端口
我可以在这里看到一些方法,但您需要向数据模型添加更多信息,例如将备份标记为单独连接的方法 link涉及 'normal' 网络,因此需要隔离。
重要的是您的术语需要更精确的定义:
Object
Definition
Node
A collection of Port
s (including Backup
versions of those Port
s).
Port
An object that can belong to one Network
and has an arbitrary number of Connection
s.
Connection
Links two Port
s, contained by a single Network
.
Network
A collection of Port
s and the Connection
s that link them together.
Backup
A Port
, Connection
or Network
that is separate from the normal set such than Backup Port
s and Backup Connection
s exist exclusively in Backup Network
s.
好的,最后一个有点笨拙,但我认为在这种情况下这是问题的必要部分。在标准 link 和备份 link 之间没有一些区别,您无法将网络 V
与其他网络分开。当然,并非所有这些对象都是实际的 类,它们是概念。有用的最小值似乎是:Node
、Port
和 Connection
,其中 Network
和 Backup
成为属性...尽管公平地说,您可能可以替换 Port
有一些逻辑,但它在某些方面很有用。
根据这些定义应该可以解决问题。它的伪代码算法可能是这样的:
For each Node:
For each connected Port with no assigned network:
Add port to new network.
Add all Connections to network.
Repeat for all connected ports.
For each connected Backup Port with no assigned Backup Network:
Add port to new Backup Network
Add all Backup Connections to network.
Repeat for all connected ports.
当然,我们可以使用正确的数据结构将两个内部循环合并为一个。
并且由于我喜欢过度设计的对象,它们使我的顶级代码更易于阅读(即使并不总是更容易理解),事实上我今天有一些时间,而且可能在圣诞节的精神...我写了一个fun implementation给你
注意:不用于生产!
(说真的,别看我用 ToString()
覆盖的所有乐趣。)
我知道这是一个逻辑问题,而不是实际的编程问题,但我希望有人可以指导我朝着正确的方向解决这个问题。看它就像出现编程谜语:)
我有节点,它们通过端口相互连接。我知道节点,也知道所有关系。现在我需要获取所有可能的网络。
为了进一步明确我的需求,我做了如下草稿: 网络布局图:https://ibb.co/51zmkfj
图例:
- A-F:节点
- 1-5:关系
- 6:冗余关系(如果节点D是 乱序)
- I-IV:我需要进入列表的网络(每个节点的所有节点 网络,因此一个节点可以在多个网络中)
- V:冗余网络,我必须单独获取 列表(包含源节点和目标节点)
请注意,网络可能会更大,并且这些冗余网络可能不止一个
正如所写,我需要这些网络 I-V。我尝试了各种方法并得到了一个适用于 I-IV 的版本,但它有很多代码,我可能对整个事情想得太多了。
我的做法:
- 遍历关系并创建一个
Dictionary<int, List<String>>
具有随机 int 标识符和 id+portNumber 作为相互连接的所有关系的唯一字符串。 - 然后我对字典执行嵌套 foreach,将每个条目与其他条目进行比较,以查找任何重复项和不完整的组。
- 然后我从词典中删除这些错误的组。
- 之后,我从字典列表中的所有值中删除了 portNumber。
我还制作了一个 .NET Fiddle,它使用与上图完全相同的数据准备。 https://dotnetfiddle.net/SQnZYs
作为有一点网络经验的人,我首先要指出的是,您不能像那样将多根电缆插入同一个端口
我可以在这里看到一些方法,但您需要向数据模型添加更多信息,例如将备份标记为单独连接的方法 link涉及 'normal' 网络,因此需要隔离。
重要的是您的术语需要更精确的定义:
Object | Definition |
---|---|
Node |
A collection of Port s (including Backup versions of those Port s). |
Port |
An object that can belong to one Network and has an arbitrary number of Connection s. |
Connection |
Links two Port s, contained by a single Network . |
Network |
A collection of Port s and the Connection s that link them together. |
Backup |
A Port , Connection or Network that is separate from the normal set such than Backup Port s and Backup Connection s exist exclusively in Backup Network s. |
好的,最后一个有点笨拙,但我认为在这种情况下这是问题的必要部分。在标准 link 和备份 link 之间没有一些区别,您无法将网络 V
与其他网络分开。当然,并非所有这些对象都是实际的 类,它们是概念。有用的最小值似乎是:Node
、Port
和 Connection
,其中 Network
和 Backup
成为属性...尽管公平地说,您可能可以替换 Port
有一些逻辑,但它在某些方面很有用。
根据这些定义应该可以解决问题。它的伪代码算法可能是这样的:
For each Node:
For each connected Port with no assigned network:
Add port to new network.
Add all Connections to network.
Repeat for all connected ports.
For each connected Backup Port with no assigned Backup Network:
Add port to new Backup Network
Add all Backup Connections to network.
Repeat for all connected ports.
当然,我们可以使用正确的数据结构将两个内部循环合并为一个。
并且由于我喜欢过度设计的对象,它们使我的顶级代码更易于阅读(即使并不总是更容易理解),事实上我今天有一些时间,而且可能在圣诞节的精神...我写了一个fun implementation给你
注意:不用于生产!
(说真的,别看我用 ToString()
覆盖的所有乐趣。)