1. 程式人生 > >DFS入門問題1(水題)

DFS入門問題1(水題)

//第一次做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"); } }}