文章目录

  • ​​1、二进制​​
  • ​​2、全排列​​

1、二进制

平常做题的时候偶尔用到二进制的所有情况的题目,软件测试,离散数学里面都有,那么怎么让程序打印出来给定n位的二进制所有情况呢,使用递归算法就好了。

#include<bits/stdc++.h>
using namespace std;

const int MAXN = 1e2;
int n=3;

bool vis[MAXN];

void dfs(int index){


if(index == n+1){

for(int i = 1; i <= n; i++){
cout << vis[i] << " ";
}

cout << endl;
return ;
}

vis[index]=true;
dfs(index+1);
vis[index]=false;
dfs(index+1);


}

int main(){

dfs(1);
return 0;
}
1 1
1 0
0 1
0 0
1 1 1
1 1 0
1 0 1
1 0 0
0 1 1
0 1 0
0 0 1
0 0 0

2、全排列

#include<bits/stdc++.h>
using namespace std;

const int MAXN = 1e2;
int n=3;

bool vis[MAXN];
int P[MAXN];

void dfs(int index){
if(index == n+1){
for(int i = 1; i <= n; i++){
cout << P[i] << " " ;
}
cout << endl;
return;

}

for(int i = 1; i <= n; i++){
if(!vis[i]){
P[index] = i;
vis[i]=true;
dfs(index+1);
vis[i]=false;
}

}
}

int main(){

dfs(1);
return 0;
}
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1