//第一次做DFS的题感觉自己是真的菜啊!!!!//明天开始DFS专项训练!!!//说下题目要求,就是给你数组从中找出几个数是否使他和为K。。
#include<stdio.h>#include<cstring>#include<iostream>#include<algorithm>#include<math.h>#include<stdlib.h>#include<stack>#include<vector>#include<string.h>#include<map>
using namespace std ;int flag , n , p , a [ 101 ], c [ 1001 ], b [ 1001 ], sum , k ;void dfs ( int t ){
int i ;if ( sum > k ){return ;}if ( sum == k ){flag = 1 ;for ( i = 0 ; i < n ; i ++ ){if ( b [ i ] == 1 ){c [ p ++ ] = a [ i ]; //用C来存储能够为K的数}}
}for ( i = t ; i < n ; i ++ ){sum += a [ i ];b [ i ] = 1 ; //标记访问过的地方。dfs ( i + 1 );sum -= a [ i ];b [ i ] = 0 ;}
}
int main (){
while (( scanf ( "%d %d" , & n , & k ) == 2 )){flag = 0 ;p = 0 ;sum = 0 ;for ( int i = 0 ; i < n ; i ++ ){scanf ( "%d" , & a [ i ]);}dfs ( 0 );if ( flag == 1 ){printf ( "YES \n " );for ( int i = 0 ; i < p ; i ++ ) //我居然把i=0给弄丢了,真心累!!!{printf ( "%d " , c [ i ]);
}printf ( " \n " );}
else {printf ( "NO \n " );}
}}
DFS入门问题1(水题)
最新推荐文章于 2021-10-17 15:00:45 发布