深度优先搜索 (DFS)

深度优先搜索 (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;
	}
}
发布了28 篇原创文章 · 获赞 1 · 访问量 581

猜你喜欢

转载自blog.csdn.net/qq_41911729/article/details/104451786