C++ ile Permütasyon Bulma
Kullanıcının girdiği sayı dizisinin tüm olası permütasyonlarını bulan C++ programı.
#include < iostream >
#include < vector >
void GeneratePermutations(const std::vector < int > & numbers,
std::vector < int > & currentPerm, std::vector < bool > & used,
std::vector < std::vector < int >> & permutations);
std::vector < std::vector < int >> FindPermutations(const std::vector < int > & numbers)
{
std::vector> permutations;
std::vector < int > currentPerm;
std::vector used(numbers.size(), false);
GeneratePermutations(numbers, currentPerm, used, permutations);
return permutations;
}
void GeneratePermutations(const std::vector < int > & numbers,
std::vector < int > & currentPerm, std::vector < bool > & used,
std::vector < std::vector < int >> & permutations)
{
if (currentPerm.size() == numbers.size())
{
permutations.push_back(currentPerm);
return;
}
for (size_t i = 0; i < numbers.size(); i++)
{
if (!used[i])
{
used[i] = true;
currentPerm.push_back(numbers[i]);
GeneratePermutations(numbers, currentPerm, used, permutations);
currentPerm.pop_back();
used[i] = false;
}
}
}
int main()
{
std::cout << "Sayilari virgulle ayirarak girin: ";
std::string input;
std::getline(std::cin, input);
std::vector < int > numbers;
size_t pos = 0;
while ((pos = input.find(',')) != std::string::npos)
{
numbers.push_back(std::stoi(input.substr(0, pos)));
input.erase(0, pos + 1);
}
numbers.push_back(std::stoi(input));
std::vector < std::vector < int >> permutations = FindPermutations(numbers);
std::cout << "Tum permutasyonlar:" << std::endl;
for (const auto& perm : permutations)
{
for (size_t i = 0; i < perm.size(); i++)
{
std::cout << perm[i];
if (i != perm.size() - 1)
std::cout << ", ";
}
std::cout << std::endl;
}
return 0;
}
Giriş/Çıkış işlemleri için gerekli kütüphane
#include < iostream >
Vektör (vector) kullanacağız
#include < vector >
C++ ile Permütasyonları bulan yardımcı fonksiyon
void GeneratePermutations(const std::vector < int > & numbers,
std::vector < int > & currentPerm, std::vector < bool > & used,
std::vector < std::vector < int >> & permutations);
C++ ile Sayıların tüm permütasyonlarını bulan fonksiyon
std::vector < std::vector < int >> FindPermutations(const std::vector < int > & numbers)
{
std::vector> permutations; // Tüm permütasyonları tutacak bir vektör oluşturulur
std::vector < int > currentPerm; // Geçerli permütasyonu tutacak bir vektör oluşturulur
std::vector used(numbers.size(), false); // Kullanılan sayıları takip etmek için bir vektör oluşturulur
GeneratePermutations(numbers, currentPerm, used, permutations); // Permütasyonları oluşturan fonksiyon çağrılır
return permutations; // Bulunan permütasyonları geri döndürür
}
C++ ile Permütasyonları bulan yardımcı fonksiyon (recursive)
void GeneratePermutations(const std::vector < int > & numbers,
std::vector < int > & currentPerm, std::vector < bool > & used,
std::vector < std::vector < int >> & permutations)
{
// Eğer geçerli permütasyon uzunluğu, sayılar dizisinin uzunluğuna eşitse, bu bir permütasyondur ve vektöre eklenir
if (currentPerm.size() == numbers.size())
{
permutations.push_back(currentPerm);
return;
}
// Sayıları teker teker kullanarak permütasyonları oluşturur
for (size_t i = 0; i < numbers.size(); i++)
{
if (!used[i])
{
used[i] = true; // Sayı kullanıldı olarak işaretlenir
currentPerm.push_back(numbers[i]); // Geçerli permütasyona sayı eklenir
GeneratePermutations(numbers, currentPerm, used, permutations); // Rekürsif olarak diğer permütasyonları oluşturmak için fonksiyon tekrar çağrılır
currentPerm.pop_back(); // Fonksiyondan döndükten sonra, eklenen sayı geri çıkarılır (backtracking)
used[i] = false; // Sayı kullanılmadı olarak işaretlenir (backtracking)
}
}
}
C++ ile Kullanıcıdan sayıları virgülle ayırarak girmesi istenir
std::cout << "Sayilari virgulle ayirarak girin: ";
std::string input;
Tüm satırı metin olarak alır
std::getline(std::cin, input);
Sayıları tutacak bir vektör oluşturulur
std::vector < int > numbers;
Girdiyi virgüllere göre ayırıp vektöre ekler
size_t pos = 0;
while ((pos = input.find(',')) != std::string::npos)
{
numbers.push_back(std::stoi(input.substr(0, pos))); // Sayıyı vektöre ekler
input.erase(0, pos + 1); // Sayıdan sonraki virgülü siler
}
numbers.push_back(std::stoi(input)); // Kalan son sayıyı vektöre ekler
C++ ile Sayıların permütasyonlarını hesaplar
std::vector < std::vector < int >> permutations = FindPermutations(numbers);
C++ ile Her bir permütasyonu ekrana yazdırır
std::cout << "Tum permutasyonlar:" << std::endl;
for (const auto& perm : permutations)
{
for (size_t i = 0; i < perm.size(); i++)
{
std::cout << perm[i];
if (i != perm.size() - 1)
std::cout << ", ";
}
std::cout << std::endl;
}
C++ ile Programın başarıyla sonlandığını belirtir
return 0;