事实证明,这个问题比我原先想象的要困难得多。我有一个连通房列表。每间客房都设有一扇关闭或打开的门。在任何时候,我都想知道哪些房间通过敞开的门连接在一起,并将它们标记为连接房间组1,连接房间组2等。
有一篇关于堆栈溢出的帖子讨论了如何生成随机连接的房间并跟踪哪些房间已连接。基本上定义一个矩阵/数组。然后,如果已连接房间,则可以使用真值或假值填充数组。因此,如果房间2和4是相连的,那么类似。矩阵如下所示:conn[a][b]conn[2][4] = trueconn[4][2] = true
+--------+--------+--------+--------+--------+
| Rooms | Room 1 | Room 2 | Room 3 | Room 4 |
+--------+--------+--------+--------+--------+
| Room 1 | N/A | false | false | false |
| Room 2 | false | N/A | false | true |
| Room 3 | false | false | N/A | false |
| Room 4 | false | true | false | N/A |
+--------+--------+--------+--------+--------+
更复杂的情况如下(2号房间和3号房间的门紧闭):
+----+----+----+
| R1 R2 | R3 |
+ +----+ +
| R5 | | R4 |
+----+ +----+
矩阵如下所示:
+--------+--------+--------+--------+--------+--------+
| Rooms | Room 1 | Room 2 | Room 3 | Room 4 | Room 5 |
+--------+--------+--------+--------+--------+--------+
| Room 1 | N/A | true | false | false | true |
| Room 2 | true | N/A | false | false | false |
| Room 3 | false | false | N/A | true | false |
| Room 4 | false | false | true | N/A | false |
| Room 5 | true | false | false | false | N/A |
+--------+--------+--------+--------+--------+--------+
我认为我有一个聪明的想法,通过仅循环遍历位于N / As上方的单元格并将每行视为不同的“连接房间组”来对连接的房间进行分组:
+--------+--------+--------+--------+--------+--------+
| Rooms | Room 1 | Room 2 | Room 3 | Room 4 | Room 5 |
+--------+--------+--------+--------+--------+--------+
| Room 1 | N/A | true | false | false | true |
| Room 2 | | N/A | false | false | false |
| Room 3 | | | N/A | true | false |
| Room 4 | | | | N/A | false |
+--------+--------+--------+--------+--------+--------+
而实际卷将全部连接,因此应该只有一个Connected Group 1: [1,2,3,4,5]
我决定用房间和门来谈谈我的问题,但我的实际问题略有不同。在高层次上,我正在制作一个分析工具,用户可以通过在体积之间打开/关闭阀门来隔离体积。该工具需要出于不同的原因将各个体积组合在一起,例如,直观地指示连接的体积,并对每个分组的体积运行压力均衡计算。
我考虑过的对连接的卷进行分组的每个架构似乎都失败了。是否有任何出色的堆栈溢出用户有智能解决方案来分组连接的房间?
我倾向于用python编程,但我精通多种语言。随意从概念上或通过您喜欢的非古老语言回答问题。
慕桂英4014372
相关分类