oj1059: Mars (full array)

Temas requisitos
de humano finalmente llegaron a la tierra en Marte y vieron el misterioso Marte. Los humanos y los marcianos no se puede entender el idioma del otro, pero nuestros científicos han inventado un método de comunicación digital. Este método de intercambio es que, en primer lugar, los marcianos a un gran número de científicos humanos indican a los científicos rompen el significado de este número, a continuación, un número muy pequeño de grandes números añadidos a lo anterior, los resultados dicen Marte, como una respuesta humana.

Marciano de una manera muy simple para representar los números - los dedos de rotura. Marciano una sola mano, pero sólo las manos de decenas de miles de dedos, los dedos en una fila, están numerados 1,2,3 ....... Marte cualquiera de los dos dedos pueden intercambiar libremente posición, se cuentan por este método.

Un marciano con una mano humana muestra cómo contar con los dedos. Si los cinco dedo - pulgar, índice, corazón, anular y meñique se numeran 3, 4 y 5, cuando están dispuestos en el orden normal, la formación de una 5 dígitos 12345, anillo y poco cambio cuando cuando la posición, forman un 5 dígitos 12354, cuando se pone el orden de cinco dedos completamente invertido, 54321 formados en todos los cinco dígitos 120 puede estar formado, el mínimo 12.345, lo que representa 1; segundo piñón 12 354 , que representa 2; máximo 54.321, lo que representa 120. La tabla siguiente muestra 6 3 dígitos que se pueden formar cuando sólo tres dedos y números que representan:

número ternario
123
132
213
231
312
321

Los números representan
. 1
2
. 3
. 4
. 5
. 6

Ahora que la suerte de las primeras personas en la tierra y Marte para comunicarse con la gente. Un marciano le permitirá ver sus dedos, los científicos le dirá a ir de la mano números muy pequeños. Su tarea es, el número de científicos de Marte representa con un dedo que le diga los números juntos y cambiar el orden de los dedos de Marte según resultado de la suma. Los datos de entrada para asegurar que los resultados no están fuera del alcance de los dedos de Marte puede ser representado.
De entrada
de entrada incluye tres líneas, una primera línea tiene un número entero positivo de N, el número de dedos Marte (1 <= N <= 10000 ). La segunda línea es un número entero positivo M, para ser añadido a la lista representa un entero pequeño (1 <= M <= 100 ). La siguiente línea es un 1 a N dispuestos en los números enteros N, separados por espacios, Marte representa el orden de los dedos.
De salida
sólo la línea de salida, que contiene N enteros, Marte indica el orden después del cambio del dedo. Cada dos números intermedios adyacentes separados por un espacio, no se puede tener espacio extra.
La entrada de la muestra de
crudo
. 5
. 3
. 1 2. 5. 4. 3
la muestra de la salida de
crudo
. 1 2. 5. 4. 3
temas relacionados con el conocimiento de toda la gama,
hablar de que aquí están todos arreglo simple de entender, con el ejemplo 123, 123, 123 están dispuestos completa, 132.213.231.312.321 son un total de 3! = 6 especies. Si el árbol es entonces 123 123 como un árbol de nodos, respectivamente, dos nodos y los nodos finales. Todas las circunstancias en cuenta, para encontrar el último de los DFS algoritmo de búsqueda en profundidad desde el principio.

Blog acerca de un vínculo específico con el método gama completa aquí con los chicos, aprendiendo juntos:
https://www.cnblogs.com/sooner/p/3264882.html

int m,n;
int a[10010],vis[10010];//记录数字和当前位置
void DFS(int x)
{
  if(x==0)//x到0时开始输出
  {
    for(int i=0;i<n;i++)
      {
        if(i!=n-1)
        cout<<a[i]<<" ";
      else
        cout<<a[i]<<endl;
      }
      return ;
  }
  for(int i=1;i<=n;i++)
  {
    if(vis[i]==0)
      {
        a[n-x]=i;
        vis[i]=1;
        DFS(x-1);
        vis[i]=0;//记得清楚当前记录
      }
  }
int main()
{
    cin>>n;
    DFS(n);
    system("pause");
    return 0;
}

Los resultados son como sigue
Aquí Insertar imagen Descripción
sujeto por el tiempo que re-disposición de los actuales M veces de matriz completa digitales de nuevo, toda la disposición puede ser la salida después de la adición.
* Sin embargo, hay una gama completa de C ++ simple función next_permutation(a, a + n);*
, donde una necesidad está dispuesto en una matriz, a + n es la longitud de la matriz, dispuesta para llevar a cabo un completo
código completo

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int a[10005], n, m;
int main() {
    cin >> n >> m;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    while (m--)
        next_permutation(a, a + n);
    for (int i = 0; i < n - 1; i++)
        cout << a[i] << " ";
    cout << a[n - 1] << endl;
    return 0;
}
Publicado 38 artículos originales · ganado elogios 27 · vistas 3176

Supongo que te gusta

Origin blog.csdn.net/qq_45891413/article/details/105055629
Recomendado
Clasificación