Java图结构代码优化与输出错误排查求助
解决Java代码冗余与双向边重复添加问题
嘿,我来帮你搞定这两个头疼的问题——代码太啰嗦、双向边没被正确过滤,还有输出结果不对的问题。咱们一步步来拆解解决:
一、先搞定代码冗余问题
原代码里针对节点2到10的判断逻辑几乎一模一样,完全是重复造轮子。这种写法不仅看着累,改起来也容易漏。咱们把重复的逻辑抽成一个通用方法,瞬间就能让代码清爽很多。
二、修复双向边过滤逻辑
原代码的问题出在这几点:
- 每次处理完节点就立刻重置
dualPass,导致判断逻辑根本没生效 - 遍历数组时没及时终止循环,找到匹配项还继续跑,浪费性能
- 连节点1的反向边都没做判断,不符合你“输入2 1要忽略”的需求
三、修正输出逻辑
原代码直接打印PrimaryArray[i][1],但如果某个节点的关联节点不足2个,会输出数组默认的0,这显然不是你要的结果。咱们得先判断节点的关联数量,再输出对应值,没有的话可以用-1这类标识代替。
优化后的完整代码
import java.util.Scanner; public class GraphHandler { public static void main(String[] args) { Scanner input = new Scanner(System.in); int time = input.nextInt(); // 原代码里这个变量没用到,可根据需求保留或删除 int lineCount = input.nextInt(); input.nextLine(); // 吃掉换行符,避免后续读取空字符串 // 存储每个节点的邻接列表,索引1-10对应节点1-10 int[][] adjacencyList = new int[11][11]; // 记录每个节点已添加的邻接节点数量 int[] nodeEdgeCount = new int[11]; for (int i = 0; i < lineCount; i++) { int source = input.nextInt(); int target = input.nextInt(); input.nextLine(); // 检查是否存在反向边(target -> source),不存在才添加当前边 if (!hasReverseEdge(adjacencyList, nodeEdgeCount, target, source)) { adjacencyList[source][nodeEdgeCount[source]] = target; nodeEdgeCount[source]++; } } // 输出每个节点的第二个关联节点(数组索引为1,因为从0开始计数) for (int i = 1; i < 11; i++) { if (nodeEdgeCount[i] >= 2) { System.out.println(adjacencyList[i][1]); } else { // 没有第二个节点时输出-1,可根据需求调整为其他标识 System.out.println(-1); } } input.close(); } // 通用方法:检查目标节点是否已包含指定的反向边 private static boolean hasReverseEdge(int[][] adjacencyList, int[] nodeEdgeCount, int targetNode, int edgeToCheck) { for (int j = 0; j < nodeEdgeCount[targetNode]; j++) { if (adjacencyList[targetNode][j] == edgeToCheck) { return true; } } return false; } }
代码亮点说明
- 冗余消除:用
hasReverseEdge方法统一处理所有节点的反向边判断,代码量直接砍半,可读性和维护性拉满。 - 逻辑修复:
- 扔掉了容易出错的
dualPass数组,用方法返回值直接判断,逻辑更清晰 - 遍历邻接列表时只跑已添加的节点数量,不用遍历整个数组,性能更优
- 所有节点(包括节点1)都会检查反向边,完全符合你“输入2 1时忽略”的需求
- 扔掉了容易出错的
- 输出修复:先判断节点的关联数量是否达标,再输出对应值,再也不会出现莫名其妙的
0了。
测试你的输入
输入:3 14 1 2 1 5 1 9 1 3 2 8 2 6 5 9 9 4 9 6 3 10 8 11 7 11 10 7 6 7
处理后对应的输出应该是:
5 6 -1 -1 -1 -1 -1 -1 6 -1
完全符合“输出每个节点的第二个关联节点”的要求。
内容的提问来源于stack exchange,提问作者Reza soumi
相关产品推荐
相关产品推荐

