为了账号安全,请及时绑定邮箱和手机立即绑定

连接房间或卷的分组 - 具有挑战性的问题

连接房间或卷的分组 - 具有挑战性的问题

杨__羊羊 2022-09-13 09:15:58
事实证明,这个问题比我原先想象的要困难得多。我有一个连通房列表。每间客房都设有一扇关闭或打开的门。在任何时候,我都想知道哪些房间通过敞开的门连接在一起,并将它们标记为连接房间组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编程,但我精通多种语言。随意从概念上或通过您喜欢的非古老语言回答问题。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

我相信你在这里所做的是在邻接矩阵中寻找连接的组件。您的房间是节点,如果它们已连接,它们将共享一个边缘。

下面是指向算法的一些伪代码的链接,该算法应以 DFS 和 BFS 方式解决您的问题。


查看完整回答
反对 回复 2022-09-13
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号