might solved feladat 4

This commit is contained in:
szabomarton
2025-03-14 09:18:00 +01:00
parent 125039f7af
commit 4287c44e6e
49 changed files with 256 additions and 31 deletions

View File

@@ -11,8 +11,15 @@ namespace Program
{
public static Dictionary<int, List<int>> Contacts = new Dictionary<int, List<int>>();
public static HashSet<int> InfectedPeople = new HashSet<int>();
public static List<int> uniquePeople = new List<int>();
public static HashSet<int> NewInfectedPeople = new HashSet<int>();
static void Main(string[] args)
{
Previous();
}
public static void ListAllInfectionTreeVoid()
{
string path = $@"../../../forrasok/elek.txt";
@@ -24,6 +31,83 @@ namespace Program
int infector = Convert.ToInt32(nums[0]);
int infected = Convert.ToInt32(nums[1]);
if (!uniquePeople.Contains(infector))
{
uniquePeople.Add(infector);
}
if (!uniquePeople.Contains(infected))
{
uniquePeople.Add(infected);
}
if (Contacts.ContainsKey(infector))
{
Contacts[infector].Add(infected);
}
else
{
Contacts[infector] = new List<int> { infected };
}
}
InfectedPeople.Clear(); // Clear the set before starting the spread
int infectionTreeCount = 0;
// Spread the virus starting from each unique person if they are not already infected
foreach (var person in uniquePeople)
{
if (!InfectedPeople.Contains(person))
{
infectionTreeCount++;
Virus rootVirus = new Virus(person);
InfectedPeople.Add(person); // Add the root virus to the infected set
SpreadBFS(rootVirus, int.MaxValue); // Spread without depth limit
}
}
Console.WriteLine($"Infected people count: {InfectedPeople.Count}");
Console.WriteLine($"Unique people count: {uniquePeople.Count}");
Console.WriteLine($"Number of infection trees: {infectionTreeCount}");
// Verify if all unique people are infected
bool allInfected = uniquePeople.All(person => InfectedPeople.Contains(person));
Console.WriteLine($"All unique people infected: {allInfected}");
if (!allInfected)
{
var notInfected = uniquePeople.Where(person => !InfectedPeople.Contains(person)).ToList();
Console.WriteLine("People not infected:");
foreach (var person in notInfected)
{
Console.WriteLine(person);
}
}
}
public static void Previous()
{
string path = $@"../../../forrasok/elek.txt";
var data = File.ReadAllLines(path);
foreach (var item in data)
{
string[] nums = item.Split(' ');
int infector = Convert.ToInt32(nums[0]);
int infected = Convert.ToInt32(nums[1]);
if (!uniquePeople.Contains(infector))
{
uniquePeople.Add(infector);
}
if (!uniquePeople.Contains(infected))
{
uniquePeople.Add(infected);
}
if (Contacts.ContainsKey(infector))
{
Contacts[infector].Add(infected);
@@ -37,13 +121,43 @@ namespace Program
Virus rootVirus = new Virus(2);
InfectedPeople.Clear(); // Clear the set before starting the spread
InfectedPeople.Add(2); // Add the root virus to the infected set
SpreadBFS(rootVirus, 2);
//Spread(rootVirus, 9);
SpreadBFS(rootVirus, 5);
//Spread(rootVirus, 15);
//rootVirus.PrintInfectionTreeWithDepth(2, 0, "->");
rootVirus.PrintInfectionTree();
Console.WriteLine(InfectedPeople.Count);
Console.WriteLine(rootVirus.CountInfectedInDepthRange(3, 10));
Console.WriteLine($"Infected people count: {InfectedPeople.Count}");
Console.WriteLine($"Unique people count: {uniquePeople.Count}");
// Verify if all unique people are infected
bool allInfected = uniquePeople.All(person => InfectedPeople.Contains(person));
Console.WriteLine($"All unique people infected: {allInfected}");
if (!allInfected)
{
var notInfected = uniquePeople.Where(person => !InfectedPeople.Contains(person)).ToList();
Console.WriteLine("People not infected:");
foreach (var person in notInfected)
{
Console.WriteLine(person);
}
}
/*
Virus rootVirus2 = new Virus(2);
int count = 0;
while (NewInfectedPeople.Count != uniquePeople.Count)
{
count++;
SpreadBFS(rootVirus2, count);
}
Console.WriteLine(count);
*/
}
@@ -74,12 +188,6 @@ namespace Program
}
}
}
// Check if the current virus should be healed
if (currentDepth - currentVirus.InfectionTurn >= 8)
{
InfectedPeople.Remove(currentVirus.Name);
}
}
}