C ++ implementa recursivamente enumeración exponencial

Seleccione aleatoriamente cualquier número de n enteros de 1 an, y muestre todas las opciones posibles.
Formato de entrada
Introduzca un número entero n.
Formato de salida
Se emite un esquema por línea.
Los números en la misma línea deben estar dispuestos en orden ascendente y dos números adyacentes deben estar separados exactamente por 1 espacio.
Para esquemas sin ningún número seleccionado, se genera una línea en blanco.
Esta pregunta tiene un validador personalizado (SPJ) y el orden entre líneas (diferentes esquemas) es arbitrario.
Rango de datos
1≤n≤15
Ejemplo de entrada:
3
Ejemplo de salida:
3
2
2 3
1
1 3
1 2
1 2 3

Código AC:

#include<iostream>
#include<string.h>

using namespace std;

int n;
int change[16];

void dfs(int index)//枚举选index和不选index的情况
{
    
    
    if(index==n+1){
    
    
        for(int i=1;i<=n;++i)//被选就输出
        {
    
    
            if(change[i]) cout<<i<<" ";
        }
        cout<<endl;
        return;
    }

    for(int i=0;i<2;++i)//0为不选,1为选
    {
    
    
        change[index]=i;
        dfs(index+1);
    }
    return;
}

int main()
{
    
    
    cin>>n;
    dfs(1);//从1开始枚举选和不选
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_44643644/article/details/108762332
Recomendado
Clasificación