zoj 1089 Lotto
题目地址:zoj 1089
题目:就是生成组合。
用dfs来写, 其中“相邻的边”实际上就是每次可以选择把某一位放入输出组中,也可以选择不放进去。 形成一“路径选择二叉树”。
搜到了一条路径就“return” 来回溯
cnt-- 就是把当前节点pass掉了~
代码:
#include<iostream> #include<vector> using namespace std; int p[13]; //int vis[13]; int k; int cnt=0; int pout[13]; void dfs(int cur) { if(cnt==6) { for(int i=0;i<5;i++) cout<<pout[i]<<" "; cout<<pout[5]<<endl; return; } if(cur>=k) return ; pout[cnt++]=p[cur]; dfs(cur+1); cnt--; dfs(cur+1); } int main() { bool flag=0; while(cin>>k) { if(k==0) break; if(flag) cout<<endl; if(!flag) flag=1; for(int i=0;i<k;i++) { cin>>p[i]; } dfs(0); } }
posted on 2014-02-26 03:24 814jingqi的ACM 阅读(106) 评论(0) 编辑 收藏 举报