Neumann_Janos_Verseny/fordulo_3/Program/PermutationGenerator.cs
2025-03-12 21:04:26 +01:00

74 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Program
{
class PermutationGenerator
{
public Dictionary<string, List<int[]>> GroupedPermutations { get; private set; }
private HashSet<string> uniquePermutations;
public PermutationGenerator()
{
GroupedPermutations = new Dictionary<string, List<int[]>>();
uniquePermutations = new HashSet<string>();
}
public void GeneratePermutations(int[] digits, int length)
{
GeneratePermutations(digits, new int[length], 0);
}
private void GeneratePermutations(int[] digits, int[] current, int index)
{
if (index == current.Length)
{
if (current[0] != 0) // Avoid permutations starting with 0
{
AddPermutation(current);
}
return;
}
for (int i = 0; i < digits.Length; i++)
{
current[index] = digits[i];
GeneratePermutations(digits, current, index + 1);
}
}
private void AddPermutation(int[] permutation)
{
var key = string.Concat(permutation.OrderBy(x => x));
var permutationString = string.Join("", permutation);
if (!uniquePermutations.Contains(permutationString))
{
uniquePermutations.Add(permutationString);
if (!GroupedPermutations.ContainsKey(key))
{
GroupedPermutations[key] = new List<int[]>();
}
GroupedPermutations[key].Add((int[])permutation.Clone());
}
}
public void PrintGroupedPermutations()
{
foreach (var group in GroupedPermutations)
{
Console.WriteLine($"Group: {group.Key}");
foreach (var permutation in group.Value)
{
Console.WriteLine(string.Join("", permutation));
}
Console.WriteLine();
}
}
}
}