搜索(全排列)

#include<bits/stdc++.h>
using namespace std;
int n,a[15],b;//n:一共的数字(1~n) a[]:结果  b:记录排列方法总数 
bool f[10]={0};//f[]:记录当前数字是否被使用过 
void dfs(int dp){
    int i;  
    if(dp == n+1){
        for(i=1;i<=n;i++)
            cout<<a[i]<<" ";//打印结果 
        b++;//方法加一 
        cout<<endl;
        return;//返回上一次调用此函数的地方 
    }
    for(i=1;i<=n;i++){//每个 
        if(f[i] == 0){
            a[dp] = i;
            f[i] = 1;
            dfs(dp+1);
            f[i] = 0;
        }
        
    }
}

int main(){
    cin>>n;
    dfs(1);
    cout<<b;
}
#include<bits/stdc++.h>
using namespace std;
int n,a[25],r;

void dfs(int dp){
    int i; 
    if(dp == r+1){
        for(i=1;i<=r;i++)
            cout<<setw(3)<<a[i]<<" ";
        cout<<endl;
        return; 
    }
    for(i=a[dp-1]+1;i<=n;i++){
        a[dp] = i;
        dfs(dp+1);
    }
}

int main(){
    cin>>n>>r;
    dfs(1);
}
#include<bits/stdc++.h>
using namespace std;
int n,a[10],b;

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

int main(){
    cin>>n;
    dfs(1);
    cout<<b;
}
原文地址:https://www.cnblogs.com/qwn34/p/13653796.html