想练练自己的深搜,倔强的不愿意for循环来搞。写了五个参数的dfs最后ac掉了。最先我写的是两个参数的,因为没看清题意以为求的是解的总数,后来才知道要打印出所有解。参数一直加,直到加了五个参数。我的dfs很烂。但慢慢写总会好的。
View Code
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <string> #include <cstdio> #include <vector> using namespace std; int n,ans,sum; char s[100]; void dfs(int cur,int sum,int len,int fa,int last) { s[len]=cur+'0'; if(cur==n) { if(sum==0) printf("%s\n",s); return; } for(int i=0;i<3;i++) { if(i==0) { len++; s[len]=' '; if(fa==-1) dfs(cur+1,sum*10+cur+1,len+1,fa,last); // else if(fa==0) // dfs(cur+1,sum*10+cur+1,len+1,fa); else if(fa==1) dfs(cur+1,sum-last+(last*10+cur+1),len+1,fa,last*10+cur+1); else if(fa==2) dfs(cur+1,sum+last-(last*10+cur+1),len+1,fa,last*10+cur+1); len--; } if(i==1) { len++; s[len]='+'; dfs(cur+1,sum+cur+1,len+1,i,cur+1); len--; } if(i==2) { len++; s[len]='-'; dfs(cur+1,sum-cur-1,len+1,i,cur+1); len--; } } len--; } int main() { while(~scanf("%d",&n)) { ans=sum=0; memset(s,0,sizeof(s)); dfs(1,1,0,-1,0); } return 0; }
相信大家有更容易的做法,请多多指教。。