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;
}
}
}