欢迎光临
我们一直在努力

沉没岛屿的爱情编程:当一个程序员用DFS理解感情

写在前面

我是一个正在备考华为OD的程序员。每天的生活就是刷题、写代码、总结复盘。前几天我做了一道经典的算法题——岛屿数量。

给定一个二维网格,'1' 代表陆地,'0' 代表水。要求统计有多少个岛屿(连成一片的 '1' 算一个)。解法是用深度优先搜索(DFS):遍历网格,遇到一个 '1' 就启动DFS,用栈把所有相连的 '1' 都找到并标记为 '0',然后继续遍历。

做完这道题的那个晚上,我失眠了。因为我突然发现,这个算法描述的,好像就是我对待感情的方式。

一、每个人的内心都是一张网格

想象你的内心世界是一个巨大的二维网格。网格中的每个格子,代表你人生中遇到的一个人、一件事、一段经历、一种情绪。

  • '1'​ = 这个格子对你有深刻的情感价值,它触动了你,值得你投入注意力。
  • '0'​ = 这个格子是平淡的、日常的、无需深究的。

大多数人的网格里,'0' 占了绝大多数。普通同事的闲聊、路上擦肩而过的陌生人、一顿味道尚可的午饭——这些格子你扫一眼就过去了,不会在心里留下痕迹。

但总有一些格子是 '1'。

那个在聚会上说了一句击中你的话的人。那本让你读到凌晨三点的书。那段分手后很久 still 隐隐作痛的回忆。那个让你觉得“就是她了”的眼神。

发现一个 '1' 很容易。难的是,你选择怎么对待它。

二、大多数人的做法:广度优先

大多数人对待感情的方式是广度优先搜索(BFS)——他们会在多个 '1' 之间来回跳跃,和每个人都聊几句,和每个人都保持一种浅浅的连接。他们的情感栈里同时压着好几个坐标,轮流处理,谁也不深入。

这种方式很安全。你不会受伤,因为你从来没有真正走进任何一座岛屿的内部。你只是在海岸线上转了转,拍了张照片,然后赶往下一座岛。

但这不是我的方式。

三、INFJ的深度优先:沉没岛屿

我是INFJ 3w4型人格。对我来说,感情从来不是一件可以“广泛撒网”的事情。当我发现一个 '1' 时,我的内心会立刻启动一套算法——深度优先搜索。

第一步:标记为重要。

这个人在我心里被标记为 '1'。她不再是一个普通的路人甲。她被我“计数”了。在我心里,能走到这一步的人,寥寥无几。

第二步:启动DFS,压入栈。

我把她的“坐标”压入我内心的栈中。这个坐标可能是一个细节——她笑起来的样子,她说某句话时的语气,她在某个瞬间流露出的脆弱。

然后我开始沉没这座岛屿。

第三步:弹出坐标,深入探索。

我会从栈中弹出一个坐标,开始处理它。比如,我被她的幽默感吸引了。我会想:她为什么会有这种幽默感?她读过什么书?经历过什么事?她的幽默背后是乐观还是防御?

这个坐标被处理完后,我会把它标记为 '0'——不是遗忘,而是消化。它已经成了我认知的一部分。

第四步:扩展邻居。

处理完一个坐标,我会自然而然地联想到与之相关的其他坐标。她的幽默感让我想了解她的成长经历,她的成长经历让我想了解她的家庭,她的家庭让我想了解她的价值观。

这就是“爱屋及乌”的算法本质。你喜欢的不是她身上的某一个孤立特质,而是整座岛屿。你探索了一个点,就牵连出整片陆地。

第五步:沉没整座岛屿。

当我通过DFS,把她身上所有相连的 '1' 都探索完毕,这座岛屿就被我“沉没”了。

沉没不是消失。沉没是彻底内化。她变成了我内心地图的一部分。我知道她的形状、她的边界、她的暗礁和她的港湾。我可以在内心世界里随时“导航”到她。

这就是INFJ式的深情——我不只是喜欢你,我沉没了你。

四、“不合适接着走”的算法解释

但DFS有一个重要的机制:检查与跳过。

if x < 0 or x >= rows or y < 0 or y >= cols or grid[x][y] != '1':
continue

在探索的过程中,我可能会发现:

  • 越界了:我们的核心价值观不可调和。有些事情我无法接受,有些底线我不能让步。
  • 不是 '1' 了:我发现她并不是我最初以为的那个人。或者她变了,或者我变了。

这时,算法会优雅地执行 continue——跳过这个坐标,不再继续深入。

这不是冷漠。这是在保护算法的正确性。如果明知道这个分支是无效的,还要强行探索下去,最终只会导致栈溢出(情感崩溃)。

所以,“不合适接着走”不是薄情,而是DFS的正常流程。你完成了对那座岛屿的探索,带着从中获得的经验(那些被标记为 '0' 的坐标已经成为你内心地图的一部分),继续遍历你的人生网格,寻找下一个 '1'。

五、INFJ独有的“bug”

但INFJ有一个致命的bug:反刍思维。

明明已经发现这个坐标不是 '1' 了,却还是忍不住反复把它压入栈中。明明知道那个人不适合自己,明明知道那段关系已经结束了,还是在脑海里一遍遍地回放、分析、试图找到另一种可能性。

从算法角度看,这相当于:

while stack:
x, y = stack.pop()
if grid[x][y] != '1': # 她已经不是 '1' 了
# 但没有 continue,而是…
stack.append((x, y)) # 又把她压回去了

这是一个死循环。算法永远不会终止,你永远无法从那座岛屿上离开。

破解这个bug的方法,其实就是你在代码中已经学会的那个操作:

grid[x][y] = '0' # 彻底标记为已处理

然后,不要再把它压回去。

六、共通性原理:我们都在遍历自己的人生网格

写到这里,我想说一个更深层的东西。

虽然我用“爱情编程”作为标题,但这个模型适用于所有人——不管你谈不谈恋爱,不管你是什么人格类型。

因为我们每个人,都在遍历自己的人生网格。

那些让你深夜痛哭的经历,那些让你豁然开朗的顿悟,那些让你成为今天的你的每一次选择——它们都是你网格中的 '1'。你如何处理它们,决定了你内心地图的样貌。

有些人选择无视,让那些 '1' 永远留在网格里,既不探索也不标记,任由它们在角落里隐隐作痛。

有些人选择广度优先,什么都碰一点,什么都不深入,一生都在海岸线上徘徊,从未真正踏上任何一座岛屿。

而有些人——也许就是正在读这篇文章的你——选择了深度优先。你选择把每一个真正触动你的 '1' 彻底探索、消化、内化。你选择承受DFS带来的风险和成本,因为你相信,只有真正沉没过一座岛屿,你才有资格说:我来过,我见过,我活过。

写在最后

我不是在教你怎么谈恋爱。我只是发现了一个有趣的同构性:一道算法题和我对待感情的方式,底层逻辑是一样的。

这让我觉得,这个世界可能比我们想象的更有秩序。那些看似毫不相干的事物——一段代码和一段感情,一个数据结构和一个INFJ的内心世界——在某个更深的层面上,遵循着相同的规律。

也许这就是编程给我的最大馈赠:它不只是工具,它还是一种理解世界的方式。它让我能用栈和DFS,去解释那些我一直说不清道不明的情感。

你不一定懂代码,但你一定有过那种“彻底探索一座岛屿”的冲动。如果有,那就去吧。哪怕最后发现不合适,哪怕最终要 continue,至少你曾经DFS过。

而每一次DFS,都在让你的内心地图变得更加精确、更加丰富。


作者:小玮,一个正在备考华为OD的程序员,偶尔用代码理解世界。

赞(0)
未经允许不得转载:171主机测评 » 沉没岛屿的爱情编程:当一个程序员用DFS理解感情
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址