DFS 深度优先算法

    xiaoxiao2022-11-22  13

    题目

     

         

     

    代码

    import java.util.Scanner; public class Main2dfs { private static int n, a[], k; /** * * 4 1 2 4 7 13 4 1 2 4 7 15 */ public static void main(String[] args) { // 输入n, a[], k Scanner in = new Scanner(System.in); n = in.nextInt(); a = new int[n]; for (int i = 0; i < n; i++) { a[i] = in.nextInt(); } k = in.nextInt(); if (dfs(0, 0)) { System.out.println(true); } else { System.out.println(false); } } // 已经从前i项得到了和sum,然后对于i项之后的进行分支 private static boolean dfs(int i, int sum) { System.out.println("i:" + i + " sum:" + sum); // 如果前n项都计算过了,则返回sum是否与k相等 if (i == n) { return sum == k; } // 不加上a[i]的情况 if (dfs(i+1, sum)) { return true; } // 加上a[i]的情况 if (dfs(i+1, sum+a[i])) { return true; } // 无论是否加上a[i]都不能凑成k就返回false return false; } }

     

    图解

     

    题目和代码出处

    excel表单方便看自己写的

    最新回复(0)