Copa Blue Bridge (primera jornada)

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;
 }

Supongo que te gusta

Origin blog.csdn.net/qq_71356343/article/details/128994581
Recomendado
Clasificación