/
NikolayIvkin
/
TheAlgorithms
Обзор
Документация
Войти
/
NikolayIvkin
/
TheAlgorithms
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/thealgorithms/backtracking/AllPathsFromSourceToTarget.java
100 строк
3 KB
Samuel Facchinello
style: enable `InvalidJavadocPosition` in checkstyle (#5237)
18 июн 2024, 20:34
Не верифицирован
18 июн 2024, 20:34
74e5199
Код
Авторство
О чём код?
package com.thealgorithms.backtracking; import java.util.ArrayList; import java.util.List; /** * Program description - To find all possible paths from source to destination * <a href="https://en.wikipedia.org/wiki/Shortest_path_problem">Wikipedia</a> * * @author <a href="https://github.com/siddhant2002">Siddhant Swarup Mallick</a> */ public class AllPathsFromSourceToTarget { // No. of vertices in graph private final int v; // To store the paths from source to destination static List<List<Integer>> nm = new ArrayList<>(); // adjacency list private ArrayList<Integer>[] adjList; // Constructor public AllPathsFromSourceToTarget(int vertices) { // initialise vertex count this.v = vertices; // initialise adjacency list initAdjList(); } // utility method to initialise adjacency list private void initAdjList() { adjList = new ArrayList[v]; for (int i = 0; i < v; i++) { adjList[i] = new ArrayList<>(); } } // add edge from u to v public void addEdge(int u, int v) { // Add v to u's list. adjList[u].add(v); } public void storeAllPaths(int s, int d) { boolean[] isVisited = new boolean[v]; ArrayList<Integer> pathList = new ArrayList<>(); // add source to path[] pathList.add(s); // Call recursive utility storeAllPathsUtil(s, d, isVisited, pathList); } // A recursive function to print all paths from 'u' to 'd'. // isVisited[] keeps track of vertices in current path. // localPathList<> stores actual vertices in the current path private void storeAllPathsUtil(Integer u, Integer d, boolean[] isVisited, List<Integer> localPathList) { if (u.equals(d)) { nm.add(new ArrayList<>(localPathList)); return; } // Mark the current node isVisited[u] = true; // Recursion for all the vertices adjacent to current vertex for (Integer i : adjList[u]) { if (!isVisited[i]) { // store current node in path[] localPathList.add(i); storeAllPathsUtil(i, d, isVisited, localPathList); // remove current node in path[] localPathList.remove(i); } } // Mark the current node isVisited[u] = false; } // Driver program public static List<List<Integer>> allPathsFromSourceToTarget(int vertices, int[][] a, int source, int destination) { // Create a sample graph AllPathsFromSourceToTarget g = new AllPathsFromSourceToTarget(vertices); for (int[] i : a) { g.addEdge(i[0], i[1]); // edges are added } g.storeAllPaths(source, destination); // method call to store all possible paths return nm; // returns all possible paths from source to destination } }