Od razu zaznaczam ze szukalem na forum i nie znalazlem tego co chzialem.
Oto funkcja z mojego programu ktora przeprowadza permutacje:
int permutacja(int m, int t[])
{
int i, j, k;
if (m < 2)
return t[m];
// wyznaczanie pierwszego od prawej elementu mniejszego niz jego sasiad z prawej strony
i = m - 1;
while ((i > 0) && (t[i - 1] >= t[i]))
i--;
// wyznaczanie elementu wiekszego od znalezionego
if (i > 0)
{
j = m;
while ((j > 0) &&(t[j - 1] <= t[i - 1]))
j--;
}
// zamiana miejscami dwoch znalezionych wyzej elementow
if ((i > 0) && (j > 0))
{
k = t[i - 1];
t[i - 1] = t[j - 1];
t[j - 1] = k;
}
//odbicie lustrzane szeregu elementow od indeksu i+1 do konca tablicy
for (i++, j = m; i < j; i++, j--)
{
k = t[i - 1];
t[i - 1] = t[j - 1];
t[j - 1] = k;
}
for(i=0;i<m;i++)
cout<<t[i]<<"->";
cout<<t[0]<<endl;
return t[m];
}
Niech m=5
A to moja tablica t[m]={1,2,3,4,5}
I tera z ta funkcja za kazdym wywolanie daje inna permutacje i o to mi chodzi
for (i=0;i<silnia(m)/m-1;i++)
permutacja(m,t);
droga = odleglosc(odl,m,t)
I ona ladnie wyswietla mi te mozliwosci wszystkie a dzieki for (i=0;i<silnia(m)/m-1;i++) temuwyswietla tytlko kombinacje wszystkich mozliwosci bez zmieniania pierwszego miejsca
Ale jesli na pierwszym miejscu w mojej tablicy dam liczbe (jesli jest ona taka jak napisalem) wieksza od 2 to juz nie wyswietla mi mozliwosci np. tylko z 3 na poczatku ale tez wyswietla pod koniec kilka z 4 na poczatku i nie potrafie zapisac tej permutacji inaczej zeby wyswietlalo prawidlo. Prosze bardzo o pomoc.