fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4.  
  5. public static void findWaysToReachNodes(int n, int[][] edges) {
  6. List<List<Integer>> graph = new ArrayList<>();
  7. for (int i = 0; i <= n; i++) {
  8. graph.add(new ArrayList<>());
  9. }
  10.  
  11. for (int[] edge : edges) {
  12. graph.get(edge[0]).add(edge[1]);
  13. graph.get(edge[1]).add(edge[0]);
  14. }
  15.  
  16. Queue<Integer> queue = new LinkedList<>();
  17. int[] visited = new int[n + 1];
  18. int[] ways = new int[n + 1];
  19. int[] level = new int[n + 1];
  20.  
  21. queue.add(1);
  22. visited[1] = 1;
  23. ways[1] = 1;
  24. level[1] = 0;
  25.  
  26. while (!queue.isEmpty()) {
  27. int node = queue.poll();
  28. System.out.println("Node: " + node + ", Ways: " + ways[node]);
  29.  
  30. for (int neighbor : graph.get(node)) {
  31. if (visited[neighbor] == 0) {
  32. queue.add(neighbor);
  33. visited[neighbor] = 1;
  34. level[neighbor] = level[node] + 1;
  35. ways[neighbor] = ways[node];
  36. } else if (level[neighbor] == level[node] + 1) {
  37. ways[neighbor] += ways[node];
  38. }
  39. }
  40. }
  41. }
  42.  
  43. public static void main(String[] args) {
  44. int n = 5;
  45. int[][] edges = {
  46. {1, 2}, {1, 3}, {2, 4}, {3, 4}, {4, 5}
  47. };
  48.  
  49. findWaysToReachNodes(n, edges);
  50. }
  51. }
  52.  
Success #stdin #stdout 0.16s 55504KB
stdin
Standard input is empty
stdout
Node: 1, Ways: 1
Node: 2, Ways: 1
Node: 3, Ways: 1
Node: 4, Ways: 2
Node: 5, Ways: 2