All Paths From Source to Target(2 Methods) | LeetCode | Java

Method 1 : Using Visited Array – DFS

<span>class</span> <span>Solution</span> <span>{</span>
<span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>resList</span><span>;</span>
<span>public</span> <span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>allPathsSourceTarget</span><span>(</span><span>int</span><span>[][]</span> <span>graph</span><span>)</span> <span>{</span>
<span>int</span> <span>len</span> <span>=</span> <span>graph</span><span>.</span><span>length</span><span>;</span>
<span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
<span>resList</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
<span>boolean</span> <span>visited</span><span>[]</span> <span>=</span> <span>new</span> <span>boolean</span><span>[</span><span>len</span><span>];</span>
<span>dfs</span><span>(</span><span>graph</span><span>,</span> <span>0</span><span>,</span> <span>len</span><span>-</span><span>1</span><span>,</span> <span>visited</span><span>,</span> <span>path</span><span>);</span>
<span>return</span> <span>resList</span><span>;</span>
<span>}</span>
<span>void</span> <span>dfs</span><span>(</span><span>int</span> <span>graph</span><span>[][],</span> <span>int</span> <span>src</span><span>,</span> <span>int</span> <span>dest</span><span>,</span> <span>boolean</span> <span>visited</span><span>[],</span> <span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span><span>)</span> <span>{</span>
<span>visited</span><span>[</span><span>src</span><span>]</span> <span>=</span> <span>true</span><span>;</span>
<span>path</span><span>.</span><span>add</span><span>(</span><span>src</span><span>);</span>
<span>if</span> <span>(</span><span>src</span> <span>==</span> <span>dest</span><span>)</span> <span>{</span>
<span>resList</span><span>.</span><span>add</span><span>(</span><span>new</span> <span>ArrayList</span><span><>(</span><span>path</span><span>));</span>
<span>}</span>
<span>for</span> <span>(</span><span>int</span> <span>ele</span> <span>:</span> <span>graph</span><span>[</span><span>src</span><span>])</span> <span>{</span>
<span>if</span> <span>(!</span><span>visited</span><span>[</span><span>ele</span><span>])</span>
<span>dfs</span><span>(</span><span>graph</span><span>,</span> <span>ele</span><span>,</span> <span>dest</span><span>,</span> <span>visited</span><span>,</span> <span>path</span><span>);</span>
<span>}</span>
<span>path</span><span>.</span><span>remove</span><span>(</span><span>path</span><span>.</span><span>size</span><span>()</span> <span>-</span> <span>1</span><span>);</span>
<span>visited</span><span>[</span><span>src</span><span>]</span> <span>=</span> <span>false</span><span>;</span>
<span>}</span>
<span>}</span>
<span>class</span> <span>Solution</span> <span>{</span>
    <span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>resList</span><span>;</span>
    <span>public</span> <span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>allPathsSourceTarget</span><span>(</span><span>int</span><span>[][]</span> <span>graph</span><span>)</span> <span>{</span>
        <span>int</span> <span>len</span> <span>=</span> <span>graph</span><span>.</span><span>length</span><span>;</span>
        <span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
        <span>resList</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
        <span>boolean</span> <span>visited</span><span>[]</span> <span>=</span> <span>new</span> <span>boolean</span><span>[</span><span>len</span><span>];</span>
        <span>dfs</span><span>(</span><span>graph</span><span>,</span> <span>0</span><span>,</span> <span>len</span><span>-</span><span>1</span><span>,</span> <span>visited</span><span>,</span> <span>path</span><span>);</span>
        <span>return</span> <span>resList</span><span>;</span>
    <span>}</span>
      <span>void</span> <span>dfs</span><span>(</span><span>int</span> <span>graph</span><span>[][],</span> <span>int</span> <span>src</span><span>,</span> <span>int</span> <span>dest</span><span>,</span> <span>boolean</span> <span>visited</span><span>[],</span> <span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span><span>)</span> <span>{</span>
        <span>visited</span><span>[</span><span>src</span><span>]</span> <span>=</span> <span>true</span><span>;</span>
        <span>path</span><span>.</span><span>add</span><span>(</span><span>src</span><span>);</span>

        <span>if</span> <span>(</span><span>src</span> <span>==</span> <span>dest</span><span>)</span> <span>{</span>
            <span>resList</span><span>.</span><span>add</span><span>(</span><span>new</span> <span>ArrayList</span><span><>(</span><span>path</span><span>));</span>
        <span>}</span>

        <span>for</span> <span>(</span><span>int</span> <span>ele</span> <span>:</span> <span>graph</span><span>[</span><span>src</span><span>])</span> <span>{</span>
            <span>if</span> <span>(!</span><span>visited</span><span>[</span><span>ele</span><span>])</span> 
                <span>dfs</span><span>(</span><span>graph</span><span>,</span> <span>ele</span><span>,</span> <span>dest</span><span>,</span> <span>visited</span><span>,</span> <span>path</span><span>);</span>
        <span>}</span>

        <span>path</span><span>.</span><span>remove</span><span>(</span><span>path</span><span>.</span><span>size</span><span>()</span> <span>-</span> <span>1</span><span>);</span>
        <span>visited</span><span>[</span><span>src</span><span>]</span> <span>=</span> <span>false</span><span>;</span>
    <span>}</span>
<span>}</span>
class Solution { List<List<Integer>> resList; public List<List<Integer>> allPathsSourceTarget(int[][] graph) { int len = graph.length; List<Integer> path = new ArrayList<>(); resList = new ArrayList<>(); boolean visited[] = new boolean[len]; dfs(graph, 0, len-1, visited, path); return resList; } void dfs(int graph[][], int src, int dest, boolean visited[], List<Integer> path) { visited[src] = true; path.add(src); if (src == dest) { resList.add(new ArrayList<>(path)); } for (int ele : graph[src]) { if (!visited[ele]) dfs(graph, ele, dest, visited, path); } path.remove(path.size() - 1); visited[src] = false; } }

Enter fullscreen mode Exit fullscreen mode

Method 2 : Using Backtracking

<span>class</span> <span>Solution</span> <span>{</span>
<span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>resList</span><span>;</span>
<span>public</span> <span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>allPathsSourceTarget</span><span>(</span><span>int</span><span>[][]</span> <span>graph</span><span>)</span> <span>{</span>
<span>resList</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
<span>int</span> <span>n</span> <span>=</span> <span>graph</span><span>.</span><span>length</span><span>;</span>
<span>int</span> <span>src</span> <span>=</span> <span>0</span><span>;</span>
<span>int</span> <span>dest</span> <span>=</span> <span>n</span><span>-</span><span>1</span><span>;</span>
<span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
<span>path</span><span>.</span><span>add</span><span>(</span><span>0</span><span>);</span>
<span>getPaths</span><span>(</span><span>graph</span><span>,</span> <span>src</span><span>,</span> <span>dest</span><span>,</span> <span>path</span><span>);</span>
<span>return</span> <span>resList</span><span>;</span>
<span>}</span>
<span>void</span> <span>getPaths</span><span>(</span><span>int</span> <span>graph</span><span>[][],</span> <span>int</span> <span>src</span><span>,</span> <span>int</span> <span>dest</span><span>,</span> <span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span><span>){</span>
<span>if</span><span>(</span><span>src</span><span>==</span><span>dest</span><span>){</span>
<span>resList</span><span>.</span><span>add</span><span>(</span><span>new</span> <span>ArrayList</span><span><>(</span><span>path</span><span>));</span>
<span>return</span><span>;</span>
<span>}</span>
<span>else</span><span>{</span>
<span>for</span><span>(</span><span>int</span> <span>ele</span> <span>:</span> <span>graph</span><span>[</span><span>src</span><span>]){</span>
<span>path</span><span>.</span><span>add</span><span>(</span><span>ele</span><span>);</span>
<span>getPaths</span><span>(</span><span>graph</span><span>,</span> <span>ele</span><span>,</span> <span>dest</span><span>,</span> <span>path</span><span>);</span>
<span>path</span><span>.</span><span>remove</span><span>(</span><span>path</span><span>.</span><span>size</span><span>()-</span><span>1</span><span>);</span>
<span>}</span>
<span>}</span>
<span>}</span>
<span>}</span>
<span>class</span> <span>Solution</span> <span>{</span>
    <span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>resList</span><span>;</span>
    <span>public</span> <span>List</span><span><</span><span>List</span><span><</span><span>Integer</span><span>>></span> <span>allPathsSourceTarget</span><span>(</span><span>int</span><span>[][]</span> <span>graph</span><span>)</span> <span>{</span>

        <span>resList</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
        <span>int</span> <span>n</span> <span>=</span> <span>graph</span><span>.</span><span>length</span><span>;</span>
        <span>int</span> <span>src</span> <span>=</span> <span>0</span><span>;</span>
        <span>int</span> <span>dest</span> <span>=</span> <span>n</span><span>-</span><span>1</span><span>;</span>
        <span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><>();</span>
        <span>path</span><span>.</span><span>add</span><span>(</span><span>0</span><span>);</span>

        <span>getPaths</span><span>(</span><span>graph</span><span>,</span> <span>src</span><span>,</span> <span>dest</span><span>,</span> <span>path</span><span>);</span>
        <span>return</span> <span>resList</span><span>;</span>
    <span>}</span>

    <span>void</span> <span>getPaths</span><span>(</span><span>int</span> <span>graph</span><span>[][],</span> <span>int</span> <span>src</span><span>,</span> <span>int</span> <span>dest</span><span>,</span> <span>List</span><span><</span><span>Integer</span><span>></span> <span>path</span><span>){</span>

        <span>if</span><span>(</span><span>src</span><span>==</span><span>dest</span><span>){</span>
            <span>resList</span><span>.</span><span>add</span><span>(</span><span>new</span> <span>ArrayList</span><span><>(</span><span>path</span><span>));</span>
            <span>return</span><span>;</span>
        <span>}</span>

        <span>else</span><span>{</span>
              <span>for</span><span>(</span><span>int</span> <span>ele</span> <span>:</span> <span>graph</span><span>[</span><span>src</span><span>]){</span>
                  <span>path</span><span>.</span><span>add</span><span>(</span><span>ele</span><span>);</span>
                  <span>getPaths</span><span>(</span><span>graph</span><span>,</span> <span>ele</span><span>,</span> <span>dest</span><span>,</span> <span>path</span><span>);</span>
                  <span>path</span><span>.</span><span>remove</span><span>(</span><span>path</span><span>.</span><span>size</span><span>()-</span><span>1</span><span>);</span>
              <span>}</span>
        <span>}</span>

    <span>}</span>
<span>}</span>
class Solution { List<List<Integer>> resList; public List<List<Integer>> allPathsSourceTarget(int[][] graph) { resList = new ArrayList<>(); int n = graph.length; int src = 0; int dest = n-1; List<Integer> path = new ArrayList<>(); path.add(0); getPaths(graph, src, dest, path); return resList; } void getPaths(int graph[][], int src, int dest, List<Integer> path){ if(src==dest){ resList.add(new ArrayList<>(path)); return; } else{ for(int ele : graph[src]){ path.add(ele); getPaths(graph, ele, dest, path); path.remove(path.size()-1); } } } }

Enter fullscreen mode Exit fullscreen mode

Thanks for reading 🙂
Feel free to comment and like the post if you found it helpful
Follow for more 🤝 && Happy Coding

If you enjoy my content, support me by following me on my other socials:
https://linktr.ee/tanujav7

原文链接:All Paths From Source to Target(2 Methods) | LeetCode | Java

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
Do not find excuses for failure, to chase success reasons.
不要找失败的借口,去追成功的理由
评论 抢沙发

请登录后发表评论

    暂无评论内容