Anul 3 Semestrul 1

This commit is contained in:
2025-02-06 20:33:26 +02:00
parent 0b130ee18c
commit 184f3bd92e
313 changed files with 348499 additions and 0 deletions
@@ -0,0 +1,110 @@
using System;
using MPI;
//mpiexec -n 4 ProjectDistributed.exe
class GraphColoringProblem
{
const int V = 4;
static bool IsSafe(int v, bool[,] graph, int[] color, int c)
{
for (int i = 0; i < V; i++)
{
if (graph[v, i] && c == color[i])
return false;
}
return true;
}
static bool GraphColoringUtil(bool[,] graph, int m, int[] color, int v)
{
if (v == V)
return true;
for (int c = 1; c <= m; c++)
{
if (IsSafe(v, graph, color, c))
{
color[v] = c;
if (GraphColoringUtil(graph, m, color, v + 1))
return true;
color[v] = 0;
}
}
return false;
}
static bool SolveGraphColoring(bool[,] graph, int m, int rank, int size, out int[] colors)
{
int[] color = new int[V];
Array.Fill(color, 0);
bool foundSolution = false;
for (int c = rank + 1; c <= m; c += size)
{
color[0] = c; // Assign a color to the first vertex based on process rank
if (GraphColoringUtil(graph, m, color, 1))
{
foundSolution = true;
break;
}
}
colors = color;
return foundSolution;
}
static void PrintSolution(int[] color)
{
Console.WriteLine("Solution Exists: Following are the assigned colors");
for (int i = 0; i < V; i++)
Console.Write($" {color[i]} ");
Console.WriteLine();
}
static void Main(string[] args)
{
using (new MPI.Environment(ref args))
{
Intracommunicator comm = Communicator.world;
int rank = comm.Rank;
int size = comm.Size;
bool[,] graph = {
{ false, true, true, true },
{ true, false, true, false },
{ true, true, false, true },
{ true, false, true, false }
};
int m = 3; // Number of colors
bool localSolution = SolveGraphColoring(graph, m, rank, size, out int[] colors);
(bool foundSolution, int[] solution) = comm.Allreduce(
(localSolution, colors),
(sol1, sol2) => sol1.Item1 ? sol1 : sol2
);
//bool globalSolution = comm.Reduce(localSolution, Operation<bool>.LogicalOr, 0);
if (rank == 0)
{
if (!foundSolution)
{
Console.WriteLine("No solution exists.");
}
else
{
Console.WriteLine("A solution has been found by one of the processes.");
PrintSolution(solution);
}
}
}
}
}
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MPI.NET" Version="1.4.0" />
</ItemGroup>
</Project>