Java实现Kruskal算法:基于输入加权矩阵展示邻接矩阵的方法
邻接矩阵展示功能实现方案
实现逻辑
你的代码中二维数组是从索引1开始存储顶点邻接关系的,要实现示例中带行/列表头、排版整齐的邻接矩阵,只需要在算法修改原矩阵前,按固定格式逐行打印表头和矩阵元素即可。
关键注意:你的
krkl方法会直接修改传入的原始权重矩阵——把已选中的边权重设为99避免重复选择,必须在调用krkl方法之前完成邻接矩阵的打印,否则展示的是被算法篡改后的错误矩阵。
可直接复用的打印代码
将以下代码插入到main方法中「用户输入完邻接矩阵权重、调用k.krkl(a,n)」的位置即可:
// 格式化打印邻接矩阵 System.out.println("===== 输入的加权邻接矩阵 ====="); // 打印列顶点表头:左上角预留对齐空位 System.out.printf("%4s", ""); for (j = 1; j <= n; j++) { System.out.printf("%4d", j); } System.out.println(); // 逐行输出矩阵内容 for (i = 1; i <= n; i++) { // 打印行顶点表头 System.out.printf("%4d", i); // 打印当前行对应的邻接权重值 for (j = 1; j <= n; j++) { System.out.printf("%4d", a[i][j]); } System.out.println(); } System.out.println();
实际输出效果
运行后的排版和你给出的示例完全匹配:
===== 输入的加权邻接矩阵 ===== 1 2 3 4 1 1 0 0 0 2 0 1 1 0 3 0 1 1 0 4 0 0 0 1
代码中通过printf固定每个数值占4个字符宽度,无论边权是个位数还是多位数,都能保持排版对齐,不会出现文字错位的问题。
可后续优化的细节
- 当前代码中硬编码的
99作为无穷大判断阈值,一旦图的边权超过99就会出现逻辑错误,后续可替换为Integer.MAX_VALUE提升代码通用性。 - 现有的
find方法没有做路径压缩优化,针对顶点数较多的图运行效率偏低,属于算法进阶阶段可调整的内容,不影响当前展示功能的正常实现。
内容的提问来源于stack exchange,提问作者ZenXiu
相关产品推荐
相关产品推荐

