842. Organizar números
Dado un número entero n, hay muchas maneras de ordenar los números 1∼n en una fila.
Ahora, envíe todas las permutaciones en el orden del diccionario.
Formato de entrada
Hay una línea que contiene un número entero n.
Formato de salida
Genere todas las permutaciones en orden lexicográfico, ocupando cada disposición una línea.
rango de datos:
1≤n≤7
Ejemplo de entrada:
3
Muestra de salida:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#include<stdio.h>
#define N 8
int n;
int std[N];
int used[N];
void dfs(int u){
if(u>n){
for(int i=1;i<=n;i++){
printf("%d ",std[i]);
}
printf("\n");
}
for(int i=1;i<=n;i++){
if(used[i]==0){
std[u]=i;
used[i]=1;
dfs(u+1);
std[u]=0;
used[i]=0;
}
}
}
int main(){
scanf("%d",&n);
dfs(1);
for(int i=1;i<=n;i++){
used[i]=0;
}
return 0;
}
92. Implementación recursiva de enumeración exponencial.
Seleccione aleatoriamente cualquier número de n enteros de 1∼n y genere todas las opciones posibles.
Formato de entrada
Introduzca un número entero n.
Formato de salida
Genere una solución por línea.
Los números de la misma fila deben estar ordenados en orden ascendente, con exactamente 11 espacios separando dos números adyacentes.
Para las soluciones que no seleccionan ningún número, se genera una línea en blanco.
Esta pregunta tiene un validador personalizado (SPJ) y el orden entre las filas (diferentes esquemas) es arbitrario.
rango de datos
1≤n≤15
Ejemplo de entrada:
3
Muestra de salida:
3
2
2 3
1
1 3
1 2
1 2 3
#include<stdio.h>
#define N 16
int n;
int std[N];//表示当前状态,0表示未确定,1表试未选,2表示选
void dfs(int u){
if(u>n){
for(int i=1;i<=n;i++){
if(std[i]==2){
printf("%d ",i);
}
}
printf("\n");
return ;
}
std[u]=2;
dfs(u+1);
std[u]=0;
std[u]=1;
dfs(u+1);
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}