My program is created to output permutations. Depending on the input that I put in, I sometimes get the correct result, but it is not accurate. However, when I do "abc", I get the correct result. When I input peoples names, I get a random result. After trying to figure out what is wrong, I am asking for advice on what I can do to improve my nextPermutation function, so I can get the correct results.
example input:
a
b
c
example output:
{a, b, c}
{a, c, b}
{b, a, c}
{b, c, a}
{c, a, b}
{c, b, a}
current input:
Jackie
Kevin
Eric
current output:
Jackie Kevin Eric
Kevin Eric Jackie
Kevin Jackie Eric
Program:
#include <iostream>
#include <algorithm>
using namespace std;
bool nextPermutation(string elements[], int n);
int main()
{
string elements[1000];
const int n = 3;
cout<<"Enter the string"<<endl;
for (int i = 0; i<n; i++)
{
cin>>elements[i];
}
do
{
cout<<elements[0]<<" "<<elements[1]<<" "<<elements[2]<<endl;
}
while (nextPermutation(elements,n));
system("PAUSE");
return 0;
}
bool nextPermutation(string elements[], int n )
{
int j = n-2;
while (j>=0 && elements[j] > elements[j+1])
{
--j;
}
if(j==-1) return false;
int k = n-1;
while (j>=0 && elements[j] > elements[k])
{
--k;
}
swap(elements[j],elements[k]);
int r = n-1;
int s = j+1;
while (r > s)
{
swap(elements[r],elements[s]);
r = r-1;
s = s+1;
}
return true;
}