DFS与回溯法
DFS
排列数
问题: 生成1~n的排列
思路: 穷举所有可能 在生成结果数组前把重复的去掉
python code
A = [None for i in range(10)]
N = 3
def dfs(cur):
if cur == N:
print(A[:N])
else:
for i in range(1, N+1):
if i not in A[:cur]:
A[cur] = i
dfs(cur+1)
dfs(0)
使用algorithm头文件的C++
C++ code
#include <iostream>
#include <algorithm>
using namespace std;
int A[10];
int N = 3;
int main()
{
for (int i = 0; i < N; i++)
A[i] = i+1;
do {
for (int i = 0; i < n; i++)
cout << A[i];
cout << endl;
} while(next_permutation(A, A+N));
return 0;
}
素数环
问题: 数字1~n围成一个n个节点的环, 不允许数字重复, 任意2个相邻数字相加, 结果均为素数, 打印所有素数环的组合.
思路: 同排列数, 多了素数判断.
python code
A = [None for i in range(0,