dfs骗分小妙招
作者:
nrs1234
,
2024-10-24 13:37:44
,
所有人可见
,
阅读 5
首先是一个n的k次方(一共n个位置,每个位置k种情况)
void dfs(int u,int n,int k){
if(u==n) return;
for(int i=1;i<=k;i++){
a[u]=i;
dfs(u+1,n,k);
}
}
接下来是排列数($A^k_n$)
void dfs(int u,int n,int k){
if(u==k) return;
for(int i=1;i<=n;i++){
if(!b[i]){
a[u]=i;
b[i]=true;
dfs(u+1,n,k);
b[i]=false;
}
}
}
然后是组合数($C^k_n$)
void dfs(int u,int n,int k){
if(u==k) return;
for(int i=1;i<=n;i++){
if(!b[i]&&i>a[u-1]){
a[u]=i;
b[i]=true;
dfs(u+1,n,k);
b[i]=false;
}
}
}
最后补一点奇妙随机数
srand(time(0));
cout<<rand()%100<<endl;
太有用了