【发布时间】:2016-10-13 12:45:26
【问题描述】:
给你一棵由 N 个节点组成的树。树是由 N 个节点和 N-1 条边组成的全连接图。这棵树中的节点的索引从 1 到 N。将索引为 1 的节点视为这棵树的根节点。根节点位于树中的第一层。您将获得树和一个整数 x 。您需要找出位于 x 层上的节点数。
输入格式
第一行由一个整数 N 组成,表示树中的节点数。接下来的 n-1 行中的每一行都由 2 个整数 a 和 b 组成,表示节点 a 和节点 b 之间的无向边。下一行包含一个整数 x。
输出格式
您需要打印一个整数来表示 x 层上的节点数。
下面是我写的sn-p代码,它不正确。请帮我找出错误。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
public class LevelNodes {
public static ArrayList[] adj;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
boolean[] visites = new boolean[N];
ArrayList[] adj = new ArrayList[N];
for(int j=0;j<N;j++){
adj[j] = new ArrayList();
}
for(int i = 0;i < (N-1) ;i++){
int a = sc.nextInt();
int b = sc.nextInt();
adj[a-1].add(b);
adj[b-1].add(a);
}
int level = sc.nextInt();
int counter = 0;
LinkedList list = new LinkedList();
list.add(1);
counter++;
while(!list.isEmpty()){
int n = (Integer) list.poll();
for(int x = 0; x< adj[n-1].size();x++){
list.add(adj[n-1].get(x));
}
counter++;
if(counter == level){
System.out.println(list.size());
break;
}
}
}
}
【问题讨论】:
-
嗨@Vivek,欢迎来到SO!您是否尝试过调试您的代码?你认为问题出在哪里?您当前的行为是什么,为什么不正确?
-
你得到什么错误信息?
-
当
counter永远不等于level时,您可能想要添加if (level <= 0 || N <= level) { System.out.println("0"); System.exit(0); }和类似内容。 -
只是一个友好的提示,您可能需要阅读此页面:How-To-Ask Guide,这样您就可以始终确保您的问题易于回答且尽可能清晰。请务必包括您为解决遇到的问题所做的任何努力,以及尝试这些修复时发生的情况。也不要忘记您的显示代码和任何错误消息!
标签: java algorithm graph tree breadth-first-search