//每一个数都有选和不选两种可能,所以一共有2^n种
//有时候从0开始可能不好理解,所以从1开始
//**回归原来状态
//输出换行即一个空行,换行符
//没有一个数都有三个状态1、选择2、不选择0、还没有判断选择
//深刻了解递归树
//第一个视频1 26
// #include[HTML_REMOVED]
// #include[HTML_REMOVED]
// #include[HTML_REMOVED]
// using namespace std;
// int n;
// const int N=16;//用来表示数据的范围量
// int state[N];//用来存储每一位数字的状态。全局数组会自动初始化为0
// void dfs(int u)//表示当前在做第u位(数组中的第几位)
// {
// if(u>n)//递归出口
// {
// for(int i=1;i<=n;i++)
// {
// if(state[i]==1)
// {
// printf(“%d “,i);
// }
// }
// printf(“\n”);//遍历一组后需要换行 就算都没有选择也会换行 有一条路是所有数字都没有选择
// return;
// }
// state[u]=2;//不选择这个数
// dfs(u+1);//这一条路走到底之后需要返回当初的状态
// //state[u]=0;这个状态可以不要
// state[u]=1;//选择这个数
// dfs(u+1);
// //state[u]=0;//恢复现场这个状态可以不要
// }
// int main()
// {
// //scanf(“%d”,&n)第一个数开始 不知道为什么不对
//cin>>n;
// dfs(1);//从第一个数开始
// return 0;
// }
// #include[HTML_REMOVED]
// using namespace std;
// const int N=16;
// int n;
// int state[N];//这个0对应的位置空着 0 1 2表示未被判断 不被选择 被选择
// void dfs(int u)//表示判断到第几位数字
// {
// if(u>n)
// {
// for(int i=1;i<=n;i++)
// {
// if(state[i]==2)
// {
// cout<<i<<” “;
// }
// }
// cout<<endl;
// return ;//到底之后就可以结束了
// }
// state[u]=1;//不选择
// dfs(u+1);
// state[u]=0;
// state[u]=2;
// dfs(u+1);
// state[u]=0;
// }
// int main()
// {
// cin>>n;
// dfs(1);
// return 0;
// }
// #include[HTML_REMOVED]
// #include[HTML_REMOVED]
// #include[HTML_REMOVED]
// #include[HTML_REMOVED]
// using namespace std;
// const int N=16;
// int n;//全局变量为0
// int state[N];//存储结果
// //0代表还没有判断 1代表选择 2代表没有选择
// void dfs(int u)
// {
// if(u>n)
// {
// for(int i=1;i<=n;i++)
// {
// if(state[i]==1)
// {
// cout<[HTML_REMOVED]>n;
// dfs(1);
// return 0;
// }
//put(“c”);相当于输出一个C和一个回车
//put(“”);相当于输出一个回车
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
vector[HTML_REMOVED]>ways;
const int N=16;
int n;//全局变量为0
int state[N];//存储结果
//0代表还没有判断 1代表选择 2代表没有选择
void dfs(int u)
{
if(u>n)
{
vector[HTML_REMOVED]way;
for(int i=1;i<=n;i++)
{
if(state[i]==1)
{
way.push_back(i);
}
}
ways.push_back(way);
return;
}
//选
state[u]=1;
dfs(u+1);
//恢复现场 (在这里是没有起作用的,但是其他情况会起作用)
state[u]=0;
//没有选
state[u]=2;
dfs(u+1);
//最后不恢复状态也行,但是最好恢复
state[u]=0;
}
int main()
{
cin>>n;
dfs(1);
for(int i=0;i<ways.size();i)
{
for(int j=0;j<ways[i].size();j)
{
cout<<ways[i][j]<<” “;
}
cout<<endl;
}
return 0;
}