DFS(二)

简介: DFS(二)DFS(二)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;
//题目:从n个数中选k个数使得和为x,且平方和最大的一组
//最大平方和为maxSumSqu
int n,k,x,maxSumSqu=-1,A[9999];
int nowK;
//temp存放临时方案,ans存放平方和最大的方案
vector<int> temp,ans;
int sumSqu;
//当前处理index号整数,当前已选整数个数为nowK
//当前已选整数之和为sum,当前已选整数平方和为sumSqu
void DFS(int index,int nowK,int sum,int maxSumSqu){
  if(nowK==k&&sum==x){//找到k个数的和为x
    if(sumSqu>maxSumSqu){
      maxSumSqu=sumSqu;//更新最大平方和
      ans=temp;//更新最优方案
    }
  return;
  }
  //已经处理完n个数,或者超过k个数,后者和超过x,返回
  if(index==n||nowK>k||sum>x)  return;
  //选index号数
  temp.push_back(A[index]);
  DFS(index+1,nowK+1,sum+A[index],sumSqu+A[index]*A[index]);
  temp.pop_back();
  //不选index号数
  DFS(index+1,nowK,sum,sumSqu);
}
相关文章
|
5月前
|
算法
DFS算法的实现
DFS算法的实现
77 3
|
7月前
|
C++
|
7月前
|
算法 索引
DFS算法及应用(二)
回溯:回溯就是DFS的一种,在搜索探索过程中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试其他路径。
|
7月前
|
算法
DFS算法及应用(一)
DFS(深度优先搜索)是一种图遍历算法,常用于解决穷举问题,如全排列、迷宫问题、图的连通性等。它沿着树的深度分支进行探索,直至达到叶子节点,若无法继续则回溯。例如,将数字6拆分为3个正整数的递增序列问题可以通过DFS实现,类似地,分糖果问题和买瓜问题同样可以用DFS求解。DFS通常涉及递归或栈结构,通过标记已访问节点避免重复。在编程中,会定义递归函数,设定结束条件,然后枚举可能的情况,并处理下一层节点。
|
机器学习/深度学习 人工智能 定位技术
|
C语言 C++
【DFS练习】素数环
【DFS练习】素数环
124 0
|
算法
DFS and BFS
DFS and BFS
54 0
|
定位技术
DFS:踏青
DFS:踏青