code-neon

C# Permütasyon Bulma

Kullanıcının girdiği sayı dizisinin tüm olası permütasyonlarını bulan C# programı.

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Sayıları virgülle ayırarak girin: ");
        string input = Console.ReadLine();

        int[] numbers = input.Split(',')
                            .Select(s => int.Parse(s.Trim()))
                            .ToArray();

        List< List< int > > permutations = FindPermutations(numbers);
        Console.WriteLine("Tüm permütasyonlar:");
        foreach (var perm in permutations)
        {
            Console.WriteLine(string.Join(", ", perm));
        }
    }

    private static List < List < int > > FindPermutations(int[] numbers)
    {
        List < List < int > > permutations = new List < List < int > >();
        List< int > currentPerm = new List< int >();
        bool[] used = new bool[numbers.Length];
        GeneratePermutations(numbers, currentPerm, used, permutations);
        return permutations;
    }

    private static void GeneratePermutations(int[] numbers, List< int > currentPerm, bool[] used, List< List < int > > permutations)
    {
        if (currentPerm.Count == numbers.Length)
        {
            permutations.Add(new List < int > (currentPerm));
            return;
        }
        for (int i = 0; i < numbers.Length; i++)
        {
            if (!used[i])
            {
                used[i] = true;
                currentPerm.Add(numbers[i]);
                GeneratePermutations(numbers, currentPerm, used, permutations);
                currentPerm.RemoveAt(currentPerm.Count - 1);
                used[i] = false;
            }
        }
    }
}

C# ile Kullanıcıdan sayı alıyoruz.

        Console.WriteLine("Sayıları virgülle ayırarak girin: ");
        string input = Console.ReadLine();

C# ile Kullanıcının girdiği sayıları parçalayarak bir diziye dönüştürüyoruz.

        int[] numbers = input.Split(',')
                            .Select(s => int.Parse(s.Trim()))
                            .ToArray();

C# ile Tüm permütasyonları bulmak için FindPermutations metodunu çağırıyoruz.

        List< List< int > > permutations = FindPermutations(numbers);
        Console.WriteLine("Tüm permütasyonlar:");
        foreach (var perm in permutations)
        {
            // Her bir permütasyonu ekrana yazdırıyoruz.
            Console.WriteLine(string.Join(", ", perm));
        }
    }

C# ile Permütasyonları bulmak için bir metot oluşturuyoruz.

    private static List < List < int > > FindPermutations(int[] numbers)
    {
        List < List < int > > permutations = new List < List < int > >();
        List< int > currentPerm = new List< int >();
        bool[] used = new bool[numbers.Length];
        // Geri izlemeli (backtracking) yöntemle permütasyonları oluşturan GeneratePermutations metodu çağırılıyor.
        GeneratePermutations(numbers, currentPerm, used, permutations);
        return permutations;
    }

C# ile Recursive olarak permütasyonları oluşturan yardımcı metot.

    private static void GeneratePermutations(int[] numbers, List< int > currentPerm, bool[] used, List< List < int > > permutations)
    {
        // Eğer mevcut permütasyonun boyutu girdi dizisinin boyutuna eşitse, permütasyonu tamamlamışız demektir.
        // Bu durumda permütasyonu listeye ekliyoruz ve çıkıyoruz.
        if (currentPerm.Count == numbers.Length)
        {
            permutations.Add(new List < int > (currentPerm));
            return;
        }
        //C# ile Döngü içinde girdi dizisini gezerek kullanılmamış sayıları kullanarak permütasyonları oluşturuyoruz.
        for (int i = 0; i < numbers.Length; i++)
        {
            if (!used[i])
            {
                // Sayı henüz kullanılmamışsa, bu sayıyı kullanılmış olarak işaretleyip mevcut permütasyona ekliyoruz.
                used[i] = true;
                currentPerm.Add(numbers[i]);
                // GeneratePermutations metodu recursive olarak çağrılarak diğer permütasyonları oluşturuyoruz.
                GeneratePermutations(numbers, currentPerm, used, permutations);
                // Önceki adıma dönmek için kullanılmış sayıyı geri çıkarıyoruz ve tekrar kullanılmamış olarak işaretliyoruz.
                currentPerm.RemoveAt(currentPerm.Count - 1);
                used[i] = false;
            }
        }
    }