Obraz wygenerowany przez sztuczną inteligencję. Przedstawia szachownicę z ustawionymi figurami. Tło jest czarne, a figury w odcieniach koloru niebieskiego.
I_R_W14_M42_C++ Ciekawe algorytmy rekurencyjne
Obraz wygenerowany przez sztuczną inteligencję Canva.ai
Źródło: domena publiczna.
Implementacja generatora permutacji w C++
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 2. using namespace std średnik.
Linia 4. void permutacje otwórz nawias okrągły int lista otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek int n przecinek int indeks znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. if otwórz nawias okrągły indeks znak równości znak równości n zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny n średnik i plus plus zamknij nawias okrągły.
Linia 7. cout otwórz nawias ostrokątny otwórz nawias ostrokątny lista otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów średnik.
Linia 8. cout otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 9. return średnik.
Linia 10. zamknij nawias klamrowy.
Linia 12. for otwórz nawias okrągły int i znak równości indeks średnik i otwórz nawias ostrokątny n średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 13. prawy ukośnik prawy ukośnik zamiana.
Linia 14. int temp znak równości lista otwórz nawias kwadratowy indeks zamknij nawias kwadratowy średnik.
Linia 15. lista otwórz nawias kwadratowy indeks zamknij nawias kwadratowy znak równości lista otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik.
Linia 16. lista otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości temp średnik.
Linia 18. permutacje otwórz nawias okrągły lista przecinek n przecinek indeks plus 1 zamknij nawias okrągły średnik.
Linia 20. prawy ukośnik prawy ukośnik cofnięcie zamiany.
Linia 21. temp znak równości lista otwórz nawias kwadratowy indeks zamknij nawias kwadratowy średnik.
Linia 22. lista otwórz nawias kwadratowy indeks zamknij nawias kwadratowy znak równości lista otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik.
Linia 23. lista otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości temp średnik.
Linia 24. zamknij nawias klamrowy.
Linia 25. zamknij nawias klamrowy.
Linia 27. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 28. int dane otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 2 przecinek 3 przecinek 4 przecinek 5 przecinek 6 zamknij nawias klamrowy średnik.
Linia 29. int n znak równości 6 średnik.
Linia 31. permutacje otwórz nawias okrągły dane przecinek n zamknij nawias okrągły średnik.
Linia 32. zamknij nawias klamrowy.
Jak działa algorytm:
Na pierwszej pozycji próbujemy ustawiać kolejno wszystkie 6 elementów.
Dla każdej takiej decyzji rekurencyjnie ustawiamy element na kolejnej pozycji.
Proces trwa aż do momentu, gdy wszystkie pozycje są obsadzone.
Każda pełna konfiguracja jest jedną permutacją.
Podsumowanie:
Dla 6 elementów liczba permutacji jest bardzo duża, dlatego w praktyce często:
nie wypisuje się wszystkich permutacji,
lub przerywa algorytm po znalezieniu konkretnego rozwiązania.
Problem ten jest klasycznym przykładem rekurencji i cofania (backtrackingu) oraz doskonałym ćwiczeniem algorytmicznego myślenia.