poj 2356 Find a multiple dfs 爆搜!!!!

这道题我可以很明确的告诉大家!!我是照着别人的代码写的,自己做却是做不出来,主要是那种深搜中的爆搜理解的真是不到位,看了别人的代码也是研究了半天,想了又想,分步调试,跟踪它的深搜过程,自己在理解,在慢慢的理解了这种爆搜的方法!!!大家见笑了!!作为弱者不怕大牛笑,呵呵!!

仅仅说一下自己的理解!!!!!!!

大家有什么好的想法说说啊!!!!!

 #include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
int a[10005],b[10005];
int sign[10005];
int sum=0,cou=0;
int n;
int temp;
bool dfs(int sum,int k)
{
 if(sum%n==0&&sum>=n)//排除sum一开始等于0的情况!!!!!如果一旦符合条件return true 到if那就将数全都输出来!!
 {
  cout<<cou<<endl;
  return true;
 }
 for(int j=k+1;j<=n;j++)
 {
  cou++;//这里是统计有几个符合的a[j]
  if(dfs(sum+a[j],j))//这句就是说下一步行不行sum+a[j]到底符不符合条件,这样就追到了下部,其实就是这么简单,但我就是给想的很复杂!!!
  {
   cout<<a[j]<<endl;
   return true;//这个可以一直返回源头!!!!!
  }
  cou--;
 }
 return false;

int main()
{
 
 while(cin>>n)
 {
  memset(sign,0,sizeof(sign));
  for(int i=1;i<=n;i++)
  cin>>a[i];
  cou=0;sum=0;  
  dfs(0,0);
 }
 return 0;
}
  

你可能感兴趣的:(poj 2356 Find a multiple dfs 爆搜!!!!)