您的位置:首页 > 其它

zoj 1089 Lotto

2014-02-26 03:24 591 查看
题目地址: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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: