深度优先搜索 (DFS)
- 深度优先搜索(DFS , Depth-First Search)是搜索的手段之一。它从某个状态开始,不断地转移状态知道无法转移,然后退回到前一个的状态,继续转移到其他状态,如此不断地重复,直至找到最终的解。
例题:
给定整数a1、a2、....、an,判断是否可以从中选出若干数,使它们的和恰好为k;
限制条件
1<=n<=20
-10^8 <= ai <= 10^8
-10^8 <= k <= 10^8
样例1
输入
n=4
a={1,2,4,7}
k = 13
输出
Yes{13=2+4+7}
样例2
输入
n=4
a={1,2,4,7}
k = 15
输出
No
解题思路:
对 n 个数进行分别判断。每个数都有两种情况:加或者不加,然后判断到最后一个数,这样我们就得到了2的次方种情况,然后判断每种情况的和是否为k,如果为k 就结束返回true,否则继续下一种情况,如果到最后都没有结果返回false
package com.zy.search;
import java.util.Scanner;
public class _DFS {
static int[] a;
static int n;
static int k;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
a = new int[n];
for(int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
k = sc.nextInt();
if(dfs(0,0)) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
static boolean dfs(int i,int sum) {
if(i == n)
return sum==k;
if(dfs(i+1,sum+a[i])) {
return true;
}
if(dfs(i+1,sum)) {
return true;
}
return false;
}
}