1. 邻接矩阵与无向图基础邻接矩阵是图论中最直观的存储方式之一特别适合初学者理解图的底层结构。想象你有一张同学关系表表格的行和列都代表班级里的同学如果两个人是朋友就在对应的格子里打勾——这就是邻接矩阵的生活化类比。在技术实现上无向图的邻接矩阵是一个n×n的方阵n为顶点数。矩阵中的0和1就像开关A[i][j]1表示顶点i和j之间有边相连而0则表示没有连接。由于是无向图这个矩阵必然是对称的——就像朋友关系是相互的如果A认识B那么B一定也认识A。我刚开始学图论时常常混淆邻接矩阵的行列含义。后来发现一个记忆诀窍把行看作出发点列看作到达点。比如G[2][3]1可以理解为从顶点2出发能到达顶点3。实际编码时用二维数组就能完美对应这个结构。2. 构建无向图的完整流程2.1 输入处理与顶点映射处理用户输入是第一步也是容易踩坑的地方。根据题目要求我们需要先读取顶点数i和边数j。这里有个细节要注意getchar()吞掉回车符的操作必不可少否则后续读取字符时会出错。我曾在项目中因为这个细节调试了半小时。顶点字符到数组索引的映射是核心技巧。示例代码用ASCII码转换b[ch]k建立映射表这种方法简洁高效。比如输入顶点是A其ASCII码是65映射到数组索引0。这里有个优化点可以增加输入校验防止重复顶点或非法字符。# Python版顶点映射示例 vertex_map {} for index in range(vertex_count): ch input()[index] # 读取顶点字符 vertex_map[ch] index # 建立字符到索引的映射2.2 邻接矩阵的填充逻辑填充矩阵时要注意无向图的对称性。当读取到边AB时需要同时设置G[A][B]和G[B][A]为1。这就像双向朋友关系需要双方都确认。在C语言实现中可以用G[b[v1]][b[v2]]G[b[v2]][b[v1]]1一气呵成。测试时建议先打印矩阵观察结构。正确的无向图矩阵应该沿主对角线对称。我曾经犯过一个错误忘记初始化矩阵为零矩阵导致计算结果出现随机值。所以G[10][10]{0}这个初始化很重要。3. 顶点度计算的实现技巧3.1 度的数学定义与代码实现在无向图中顶点的度就是与之相连的边数。对应到邻接矩阵就是统计该顶点所在行或列中1的个数因为矩阵对称统计行或列均可。示例代码中通过双重循环实现for(k0;ki;k){ int num0; for(t0;ti;t){ numG[t][k]; // 统计列中的1 } // 输出处理... }这里有个性能优化点对于n个顶点的图时间复杂度是O(n²)。如果图非常稀疏边数远小于n²可以考虑改用邻接表存储。不过对于题目要求的规模i≤10这个实现完全够用。3.2 输出格式的精细控制输出要求行末没有最后的空格这个细节考察对输出格式的控制能力。示例代码用flag标记第一个输出项的做法很经典if(flag0){ printf(%d,num); flag1; } else printf( %d,num);Python中可以用join更优雅地实现degrees [str(calc_degree(i)) for i in range(vertex_count)] print( .join(degrees))4. 完整代码实现与测试4.1 C语言实现解析原题给出的C实现有几个值得学习的点使用b[73]数组实现ASCII码到索引的快速映射73足够覆盖大写字母矩阵初始化为全零G[10][10]{0}用getchar()处理换行符的技巧对称设置矩阵元素的简洁写法实际项目中我会增加输入校验和错误处理。比如检查边数j是否超过最大可能值无向图最大边数为n(n-1)/2或者边顶点是否存在于顶点集合中。4.2 Python版本实现用Python重写这个算法会更简洁以下是关键部分def build_graph(): vertex_count, edge_count map(int, input().split()) vertices input().strip() vertex_map {v:i for i,v in enumerate(vertices)} matrix [[0]*vertex_count for _ in range(vertex_count)] for _ in range(edge_count): v1, v2 input().strip() i, j vertex_map[v1], vertex_map[v2] matrix[i][j] matrix[j][i] 1 degrees [sum(row) for row in matrix] print( .join(map(str, degrees)))Python版利用了列表推导式和字典映射代码量减少近半。但要注意matrix的初始化方式——使用[[0]*n]*n会导致行间引用问题这是Python新手常踩的坑。测试时建议覆盖以下场景无边图j0完全图所有顶点两两相连带孤立顶点的图重复边输入虽然题目未要求处理邻接矩阵虽然简单但它揭示了图论算法的核心思想——如何用数据结构表示关系网络。掌握这个基础后学习深度优先搜索、最短路径等算法会事半功倍。我在学习数据结构时曾用邻接矩阵实现过一个简单的社交网络分析工具通过统计每个人的度数找出社交圈中的关键人物这种实践让抽象的概念变得具体而有用。