C++ 深度优先搜索 生成全排列排列如何用深度优先搜索(DFS)生成全排列?求代码和每句的详解

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 19:23:22

C++ 深度优先搜索 生成全排列排列如何用深度优先搜索(DFS)生成全排列?求代码和每句的详解
C++ 深度优先搜索 生成全排列排列
如何用深度优先搜索(DFS)生成全排列?求代码和每句的详解

C++ 深度优先搜索 生成全排列排列如何用深度优先搜索(DFS)生成全排列?求代码和每句的详解
#include<cstdio>
#include<iostream>
using namespace std;
int a[1000],v[1000],n;
void print(){
  for (int i=1;i<=n;i++) printf("%d ",a[i]); //将每位输出 
  puts(""); //换行 
}

void DFS(int dep){
  if (dep==n) print(); //如果搜到一个结果输出 
  dep++; //查找当前要处理位 
  for (int i=1;i<=n;i++) { //枚举当前位 
   if (v[i]) continue; //如果这个数之前被选过就跳过 
   v[i]=1; //选中当前位 
   a[dep]=i;//将当前位存入数组 
   DFS(dep);//搜索下一位 
   v[i]=0;//取消选中当前位 
  }
}

int main(){
  scanf("%d",&n); //读入
  DFS(0); //深搜
  system("pause"); //暂停(查看结果) 
}