DFS 和排列组合
来源:互联网 发布:python requests爬虫 编辑:程序博客网 时间:2024/05/29 09:29
#include <iostream>
using namespace std;
int visit[50],a[50];
int n;
void DFS(int x) //对n个数进行全排列
{
int j;
if(x==n)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS(x);
visit[j]=0;
}
}
}
void DFS1(int x,int k) //在n个数中任选k个进行排列
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS1(x,k);
visit[j]=0;
}
}
}
void DFS2(int x,int k) //在n个数中任选k个数进行组合
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=a[x-1]+1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS2(x,k);
visit[j]=0;
}
}
}
int main()
{
int i,j,k;
cin>>n;
cout<<"对n个数进行全排列。。。。。。。1"<<endl;
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS(1);
visit[i]=0;
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行排列。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS1(1,k);
visit[i]=0;
}
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行组合。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS2(1,k);
visit[i]=0;
}
}
}
cout<<endl;
return 0;
}
using namespace std;
int visit[50],a[50];
int n;
void DFS(int x) //对n个数进行全排列
{
int j;
if(x==n)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS(x);
visit[j]=0;
}
}
}
void DFS1(int x,int k) //在n个数中任选k个进行排列
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS1(x,k);
visit[j]=0;
}
}
}
void DFS2(int x,int k) //在n个数中任选k个数进行组合
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=a[x-1]+1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS2(x,k);
visit[j]=0;
}
}
}
int main()
{
int i,j,k;
cin>>n;
cout<<"对n个数进行全排列。。。。。。。1"<<endl;
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS(1);
visit[i]=0;
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行排列。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS1(1,k);
visit[i]=0;
}
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行组合。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS2(1,k);
visit[i]=0;
}
}
}
cout<<endl;
return 0;
}
- DFS 和排列组合
- 排列组合 dfs
- DFS之枚举排列组合
- hdu5379 dfs+排列组合
- dfs生成排列组合模板
- hdu 1015 Safecracker【dfs 排列组合】
- [ACM] hdu 1521 排列组合(组合+DFS)
- Hdu 1716 排列2【stl+dfs排列组合】
- bnuoj 52305 Around the World dfs+排列组合
- [51Nod 1677 Treecnt] 树上dfs+排列组合
- 【POJ 3187 Backward Digit Sums】 + DFS + 排列组合
- 蓝桥杯 算法训练 摆动序列 【排列组合 + DFS】
- 排列组合公式和写法
- 排列组合和回溯算法
- 动态规划和排列组合(转)
- 数学和算法之---排列组合
- 排列组合
- 排列组合
- if
- Android之TelephonyManager类的方法详解
- 3.2栈的应用举例
- 13个要重点关注的数据指标
- HDU 1575 Tr A
- DFS 和排列组合
- POJ 2774 Long Long Message(SA 求最长公共子串)
- Linux下使用system()函数一定要谨慎
- poj2914无向图的最小割模板
- iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- node-sqlite3源码分析 - Database::run方法
- Cisco3550三层交换机vlan间路由配置实例
- mysql 自动备份一系列问题
- Discuz!X 中积分操作函数以及自定义积分