这是我从网上摘抄的板子
inline int read()
{
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch>'9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
x = x * 10 + ch - '0', ch = getchar();
return x * f;
}
深度优先搜索(dfs)其实不仅仅可以在图里面应用,在一些题目里面,可以把数据放在一个树或者图一样的结构上面,然后用特定的语句筛选出自己需要的结果。
例一、
从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
输入3
输出
3
2
2 3
1
1 3
1 2
1 2 3
这里就可以把1 2 3看成一棵树
1 , 2 , 3
/ \
1: 1,2,3 2,3
/ \ / \
2: 1,2,3 1,3 2,3 3
/ \ / \ / \ / \
3: 1,2,3 1,2 1,3 1 2,3 2 3 无
依次对1,2,3进行判断 选还是不选最后输出选的就行了
#include<bits/stdc++.h>
using namespace std;
int n;
const int N = 1000;
int visit[N] = { 0 };
void dfs(int u)
{
if (u > n)
{
for (int i = 1; i <= n; i++)
{
if (visit[i])
cout << i << " ";
}
cout << endl;
}
else
{
visit[u] = false;
dfs(u + 1);
visit[u] = true;
dfs(u + 1);
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}