Contest1079 - [竞赛班]广搜和深搜全排列
2023-07-18 12:00:00
3333-07-18 16:00:00
信息与公告
全排列模板
#include<bits/stdc++.h> using namespace std; int n; int a[1000],vis[1000]; //a是存全排列的 vis存是否出现过 void dfs(int d){ //d代表第几个数字 if(d>n){ //假设n是4 d为5代表第5个数字,这时前4个已经设置到了 for(int i=1;i<=n;i++) //相应的应用 printf("%d ",a[i]); cout<<endl; return; //别忘了return } for(int i=1;i<=n;i++){ //设置当前第d个数字,可能是1~n的某一个 if(!vis[i]){ //i这个数字没有在a数组中、没有被选过 a[d] = i; vis[i] = 1;//第d个数字是i,且标记i被选了 dfs(d+1); //选下一个数字 vis[i] = 0; //“归”时将重新设置第d个数字进行尝试 } //所以之前设置的i取消标记 } } int main(){ cin>>n;//n个数字 dfs(1);//从第1个数字开始设置 return 0; }