might solved feladat 4
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user