方法一:
#include
#include
#include
using namespace std;
int n,a[10],book[10];
void dfs(int step)
{
if(step==n)
{
for(int i=0;i cout< return; } for(int i=1;i<=n;i++) { if(book[i]==0) { a[step]=i; book[i]=1; dfs(step+1); book[i]=0; } } } int main() { cin>>n; dfs(0); return 0; } 核心dfs思想: void dfs(int step) { if(到达目的地) { 输出解 返回 } 合理的剪枝操作 for(int i=1;i<=枚举数;i++) { if(满足条件) { 更新状态位; dfs(step+1); 恢复状态位; } } } 方法二: #include #include #include using namespace std; int n,a[10]; int main() { cin>>n; for(int i=0;i do { for(int i=0;i cout< }while(next_permutation(a,a+n)); return 0; }



