Почему возвращаемое значение не равно массиву? - PullRequest
0 голосов
/ 30 апреля 2018

Сначала я выполняю поиск по глубине, но выходные данные не равны массивам. Что не так?

public static int[] Search (int [][] graph){
        boolean[] visited = {false, false, false, false, false, false};
        int n = 6;
        List<Integer> output = new ArrayList<>();
        Search(graph, visited, n, 0);
        return output.stream().mapToInt(Integer::intValue).toArray();
    }

    public static void Search(int[][] graph, boolean [] visited, int n, int i) {
        System.out.print((i )+" ");
        visited[i] = true;
        for (int j = 0; j < n; j++) {
            if (!(visited[j]) && graph[i][j] == 1) {
                Search(graph, visited, n, j);
            }
        }
    }

public static void main(String[] args) {

        int [][] graph={{0,1,1,1,0,0},{1,0,0,0,1,1},{1,0,0,0,0,1},{1,0,0,0,0,0},{0,1,0,0,0,0},{0,1,1,0,0,0}};

        int [] Searchresult={0,1,4,5,2,3};

    }   

Как вы видите, DFSresult и вывод совпадают. Я сделал ошибку в ответном заявлении?

1 Ответ

0 голосов
/ 30 апреля 2018

Ваш метод DFS(graph) возвращает пустой массив:

List<Integer> output = new ArrayList<>();
DFS(graph, visited, n, 0);
return output.stream().mapToInt(Integer::intValue).toArray();

Вы никогда не добавляете ничего в ArrayList, из которого создается массив.

Возможно, вы забыли шаг, в котором вы передаете список output методу void DFS(int[][] graph, boolean [] visited, int n, int i) и добавляете к нему значения.

public static int[] DFS (int [][] graph) {
    boolean[] visited = {false, false, false, false, false, false};
    int n = 6;
    List<Integer> output = new ArrayList<>();
    DFS(graph, visited, n, 0, output);
    return output.stream().mapToInt(Integer::intValue).toArray();
}

public static void DFS(int[][] graph, boolean [] visited, int n, int i, List<Integer> output) {
    System.out.print((i )+" ");
    output.add(i);
    visited[i] = true;
    for (int j = 0; j < n; j++) {
        if (!(visited[j]) && graph[i][j] == 1) {
            DFS(graph, visited, n, j, output);
        }
    }
}

После внесения этих изменений, вывод становится

0 1 4 5 2 3 DFS работает правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...