[ Foro de C++ ]
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!!
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.)