public static void BFS(int[] arr, int m, LinkedList<Integer> l) {
    while (!l.isEmpty()) {
      int n = l.pollFirst();
      if (n == m) {
        return;
      }

      /*
       * 这里在插入节点之前判断，相对节省时间
       * 而且不用判断不等于0的情况，在那种情况的时候，节点肯定被访问过了
       */
      if (n > 0 && arr[n - 1] == 0) {
        arr[n - 1] = arr[n] + 1;
        l.add(n - 1);
      }

      if (2 * n < 20000 && arr[2 * n] == 0) {
        arr[2 * n] = arr[n] + 1;
        l.add(2 * n);
      }
    }
  }