开始写深度优先遍历一步步走,走一步+1,只能过40%,因为可能不是最长的最后走完
看了大佬说 2*(n-1)-最长,然后开始写了一个广搜。
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayList[] arr = new ArrayList[n + 1];//邻接表
for(int i = 1; i <arr.length ; i++){
arr[i]=new ArrayList<Integer>();
}
int len = 0;
for(int i = 0; i < n - 1; i++){
int x = scanner.nextInt(), y = scanner.nextInt();
arr[x].add(y);
arr[y].add(x);
}
//广度优先遍历
Stack<Integer> stack = new Stack<>();
stack.add(1);
int[] visited = new int[n + 1];
visited[1] = 1;
while (!stack.isEmpty()) {
len++;
Stack<Integer> stackT = new Stack<>(); //一层一层遍历搜索
while (!stack.isEmpty()) {
int now = stack.pop();
ArrayList<Integer> arrayList = arr[now];
for(Integer a : arrayList){
if(visited[a] == 0){//如果a没有被访问过
stackT.add(a);
visited[a] = 1;
}
}
}
stack = stackT;
}
System.out.println(2 * (n - 1) - len+1);
}
} 
京公网安备 11010502036488号