POJ-3187-Backward Digit Sums
2014-04-12 10:50
337 查看
题目链接:http://poj.org/problem?id=3187
这是一个简单的深度优先搜索搜索入门题,因为自己算法一直没怎么重视,现在又开始重新刷这道题的时候,出现了好多次小错误,耽误了很多时间。
教训:一定要注意不要随意设全局变量,以免在某些函数中改了值之后对其他函数造成影响
下面贴代码:
这是一个简单的深度优先搜索搜索入门题,因为自己算法一直没怎么重视,现在又开始重新刷这道题的时候,出现了好多次小错误,耽误了很多时间。
教训:一定要注意不要随意设全局变量,以免在某些函数中改了值之后对其他函数造成影响
下面贴代码:
#include<iostream> #include<cstring> int a[11],vis[11],n,k=0,sum; using namespace std; int check() { int i,k; int d[11]; int z[11]; k=n; for(i=0;i<k;i++) { z[i]=d[i]=a[i];//对全局变量a[]数组进行拷贝,而不是直接对a[]数组进行操作 } while(k>1) { for(i=0;i<k;i++) { d[i]=z[i]+z[i+1]; } k--; for(i=0;i<k;i++) z[i]=d[i]; } if(d[0]==sum)return true; else return false; } int dfs(int x) { int i; if(x==n&&check())return true;//x取值已经越界,此时判断得到的排列是否满足条件 for(i=1;i<=n;i++) { if(x<n&&!vis[i]) { vis[i]=1; a[x]=i; if(dfs(x+1))return true; vis[i]=0; } } return false; } int main() { int i; while(cin>>n>>sum) { memset(vis,0,sizeof(vis)); if(dfs(0)) for(i=0;i<n;i++) { if(i>0)cout<<" "; cout<<a[i]; } cout<<endl; } return 0; }
相关文章推荐
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums (dfs全排列)
- POJ 3187 Backward Digit Sums
- [poj]3187 Backward Digit Sums [dfs]
- POJ 3187 Backward Digit Sums
- POJ--3187--Backward Digit Sums
- poj 3187 Backward Digit Sums(穷竭搜索dfs)
- POJ 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums G++
- poj 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- Backward Digit Sums(POJ 3187)
- 【POJ】3187 - Backward Digit Sums(枚举)
- POJ—3187 Backward Digit Sums(next_permutation)
- POJ 3187 Backward Digit Sums
- poj--3187--Backward Digit Sums(dfs)