作者:小号🎺
上次用了四个点,建立了一个4×4邻接矩阵,连接关系类似汉字“口”,并画出了对应的可视化图。(🔗学Python5️⃣3️⃣ 实战Vibe Coding 图:一个“口”字)
四个节点的邻接矩阵是:
[0, 1, 0, 1],[0, 0, 1, 0],[0, 0, 0, 0],[0, 0, 1, 0]
对应上面这个4×4的邻接矩阵,其可视化图如下

仔细观察前两次案例,3个点有3×3邻接矩阵,4个点有4×4邻接矩阵。以此类推,是不是n个点就有n×n邻接矩阵?小号决定就此询问AI。
问题:
①是不是 n 个点的邻接矩阵就是 n×n 的?
②现在希望在“口”字中加一划,变成“日”字。这样应该是6个点,是不是应该有一个 6×6 邻接矩阵?
AI回答:
是的。n 个点就有 n×n 的邻接矩阵。
像“日”字那样有6个点,对应的就有一个 6×6 的邻接矩阵。如采用“日”字书写笔划方向作为连接的方向,这样的图也是一个有向图。
仿照前例,AI也给出了相应的可视化代码(Python版)如下:
# Visualization of 6x6 Adjacency Matrix for "日" char as a Directed Graphimport numpy as npimport networkx as nximport matplotlib.pyplot as plt# 中文字体设置 - 放在所有绘图代码之前plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun']plt.rcParams['axes.unicode_minus'] = FalseA = np.array([[0, 1, 0, 0, 0, 1],[0, 0, 1, 0, 0, 0],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 0, 0],[0, 0, 0, 1, 0, 0],[0, 0, 1, 0, 1, 0]])G = nx.DiGraph(A) # networkx 可以直接从邻接矩阵读取# 为了视觉上像“日”,固定节点位置pos = {0: (0, 2), # 左上1: (1, 2), # 右上2: (1, 1), # 右中3: (1, 0), # 右下4: (0, 0), # 左下5: (0, 1) # 左中}fig, ax = plt.subplots(figsize=(6, 9))nx.draw(G, pos, with_labels=True, node_color='lightgreen',node_size=800, arrowstyle='-|>', arrowsize=20)edge_labels = {(u,v): f'{u}->{v}' for u,v in G.edges()}nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)#plt.tight_layout()plt.title("“日”字,6节点,笔划书写方向,\n有向图,邻接矩阵 可视化")plt.show()
代码运行截图:

说明:“日”字形有向图的绘制过程比较简单。不过仔细回想起来,其中还是有很多反复和曲折。但为了便于理解、突出正题,省去了其中过于琐碎和无关的部分。
好了,休息一下。
如果有兴趣,可以尝试画一个“目”字形的有向图,给出它的邻接矩阵,等等。



