[ Foro de C++ ]

Necesito saber cómo funciona un código

03-Dec-2015 07:14
Ramon Rodriguez
1 Respuestas

Hola, buenas tardes. Estoy realizando una tarea de permutaciones y combinaciones de la materia de Matemáticas Discretas, en internet encontré un código en c++ para hacer eso pero no soy muy bueno en programación, a penas son principiante y no comprendo del todo el código, es el siguiente:

 
/*
* C++ Program to Find Permutations of Given Character String
*/
#include<iostream>
using namespace std;
/* Function to swap two characters */
void swap(char& a, char& b)
{
    char temp;
    temp = a;
    a = b;
    b = temp;
}
/* Function to obtain permutations of string characters */
void permutation(string s,int i,int n)
{
    int j;
    if (i == n)
        cout << s << "\t";
    else
    {
        for (j = i; j < s.length(); j++)
        {
            swap(s[i],s[j]);
            permutation(s, i + 1, n);
            swap(s[i],s[j]);
        } 
    }
}
int main()
{
    string s;
    cout << "Enter the string : ";
    cin >> s;
    cout << endl << "The permutations of the given string : " << endl;
    permutation(s, 0, s.length() - 1);
    cout << endl;
}
 


Pero por ejemplo, no comprendo que hace este ciclo:

 
for (j = i; j < s.length(); j++)
        {
            swap(s[i],s[j]);
            permutation(s, i + 1, n);
            swap(s[i],s[j]);
        }
    }
}
 


o cómo imprime esta parte?
permutation(s, 0, s.length() - 1);

Alguien me hecha una mano?, gracias de antemano!!


05-Dec-2015 14:07
Nacho Cabanes (+31)

Sin saber lo que conoces y lo que no, es difícil guiarte. Aun así...

- La función "swap" intercambia dos valores, que recibe como parámetros por referencia. Debería ser accesible para cualquier aprendiz de programación con nivel medio-bajo.

- La función "permutation" es más compleja: es un ejemplo de cómo recorrer todos los valores posibles, usando recursividad. Para un aprendiz de programación, entender una función así supone tener un nivel medio-alto. Para entender los fundamentos, quizá te ayuden estos dos artículos:

http://nachocabanes.blogspot.com.es/2013/04/busqueda-exhaustiva-backtracking.html

http://nachocabanes.blogspot.com.es/2013/04/busqueda-exhaustiva-acercamiento.html
 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)