学Python5️⃣5️⃣ 实战Vibe Coding 图:邻接矩阵
作者:小号🎺
通过前面 3个点以及4个点“口”、6个点“日”的练习,看到了邻接矩阵的重要性。
现实中不仅有像“口”形、“日”形那样很“标准”、“规范”的图(graph),也有许多各式各样特殊形状的图。这些图无法每一个都找到对应的汉字去描述,但可以借助邻接矩阵去定义、表达。
通过前面几次练习,总结出一些由图(graph)生成对应邻接矩阵的方法如下:
①先(在纸上)画出一幅图的草图
②对草图上各个节点编号
③依编号顺序记录某节点到其他节点的关系,有连接关系,设置为1或V>0;没有连接关系,设置为0。
④属于一个节点的信息记录为一行,有N个节点,就有N行。
⑤同一个节点,到图中其他N-1个节点,共有N-1项值,再加上自身(目前统一设置为0)。这样每一行也是N项。
⑥这样做完以后,正好构成一个N×N矩阵(邻接矩阵)。
⑦再按照步骤①中的草图中个节点的位置,设置一个 pos 变量(一个内含N个节点坐标的字典dict),如
pos = {0: (0,0), 1: (1,0), 2: (1,1)...}
⑧这样就完成了一幅图(graph)的定义,就可以交给代码绘图了,完成可视化输出。
⑨第③④⑤步中涉及矩阵中的纵横关系也可以相互交换,实质不变。不过这一条稍微要注意一下,实质不变有两层含义。❶因为最终结果是一个N×N矩阵,所以操作上先横后竖或者先竖后横都是等价的。❷涉及到图当中的有向图和无向图的区别。这一条文字叙述比较麻烦,最好就是亲自上手实操一遍,马上就理解了。
下面来一个实操。
一. 绘制草图

二. 生成邻接矩阵
有5个点,最终应该是一个5×5的邻接矩阵
[0, 1, 1, 1, 0],[0, 0, 0, 1, 0],[0, 0, 0, 0, 1],[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]
三. 确定位置,定义一个 pos
pos = {
0: (1, 2),
1: (0, 1),
2: (2, 1),
3: (1, 0),
4: (3, 0.5)
}
四. 将 邻接矩阵 和 pos 代入前面的代码,检查是否有错误
实操结果

说明:上述方法是小号在多次Vibe Coding实操中归纳总结而得。过程有反复。上面的①~⑨步,也和AI(DeepSeek)确认过。其中也许有不够准确的,大家也可以通过实操检验一下。
好了,先休息一下。
另外,在邻接矩阵中,从左上角到右下角,对角线上相应位置的项,即为某节点自己到自己。大家也可以自己检测一下。
[0, 1, 1, 1, 0],[0, 0, 0, 1, 0],[0, 0, 0, 0, 1],[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]

备注:前几天曾经看到新版PyCharm发出的提示: "Trial: 6 days"。今天是最后一天。然后就看到PyCharm要求小号输入密钥,激活专业版的提示。小号将提示窗口中的选项换了一个,然后退出,再重启PyCharm,一切感觉都没变。社区版IDE的右上角(下图红框内)有一个"Unblock Pro"按钮(解锁专业版),不影响使用。


