New tests

This commit is contained in:
Guilherme Werner
2023-06-18 20:26:07 -03:00
parent 597990c972
commit 8198093375
5 changed files with 175 additions and 15 deletions

View File

@ -116,6 +116,78 @@ Graph *Graph::ToTransitiveClosure()
return new Graph(closure, closure.size());
}
void Graph::TransitiveReduction()
{
auto closure = this->GetAdjacencyMatrix();
cout << "G1:" << endl;
Graph::_PrintAdjacencyMatrix(closure);
for (auto k = 0; k < this->nodes; k++)
{
for (auto i = 0; i < this->nodes; i++)
{
for (auto j = 0; j < this->nodes; j++)
{
if (i == j)
{
closure[i][j] = 1;
}
else
{
closure[i][j] = closure[i][j] || (closure[i][k] && closure[k][j]);
}
}
}
}
cout << "TC:" << endl;
Graph::_PrintAdjacencyMatrix(closure);
auto reduction = this->GetAdjacencyMatrix();
for (auto j = 0; j < this->nodes; j++)
{
for (auto i = 0; i < this->nodes; i++)
{
if (reduction[i][j] == 1)
{
for (auto k = 0; k < this->nodes; k++)
{
if (reduction[j][k] == 1)
{
reduction[i][k] = 0;
}
}
}
}
}
cout << "G2:" << endl;
Graph::_PrintAdjacencyMatrix(reduction);
for (auto k = 0; k < this->nodes; k++)
{
for (auto i = 0; i < this->nodes; i++)
{
for (auto j = 0; j < this->nodes; j++)
{
if (i == j)
{
reduction[i][j] = 1;
}
else
{
reduction[i][j] = reduction[i][j] || (reduction[i][k] && reduction[k][j]);
}
}
}
}
cout << "TC:" << endl;
Graph::_PrintAdjacencyMatrix(reduction);
}
/*
void Graph::TransitiveClosure()
{

View File

@ -87,6 +87,8 @@ public:
Graph *ToTransitiveClosure();
void TransitiveReduction();
public:
static vector<vector<int>> MultiplyIncidenceMatrix(const vector<vector<int>> &matrix1, const vector<vector<int>> &matrix2)
{

View File

@ -5,7 +5,6 @@ int main()
int nodes = 6;
Graph *g1 = new Graph(nodes);
g1->AddEdge(0, 0);
g1->AddEdge(0, 1);
g1->AddEdge(0, 2);
g1->AddEdge(0, 3);
@ -17,22 +16,24 @@ int main()
g1->AddEdge(4, 0);
g1->AddEdge(4, 2);
cout << "M1:" << endl;
g1->PrintIncidenceMatrix();
g1->PrintAdjacencyMatrix();
auto m1 = g1->GetIncidenceMatrix();
g1->TransitiveReduction();
Graph *g2 = g1->ToTransitiveClosure();
cout << "M2:" << endl;
g2->PrintIncidenceMatrix();
g2->PrintAdjacencyMatrix();
auto m2 = g2->GetIncidenceMatrix();
// cout << "M1:" << endl;
// g1->PrintIncidenceMatrix();
// g1->PrintAdjacencyMatrix();
// auto m1 = g1->GetIncidenceMatrix();
auto m3 = Graph::MultiplyIncidenceMatrix(m1, m2);
Graph *g3 = new Graph(m3);
cout << "M3:" << endl;
g3->PrintIncidenceMatrix();
g3->PrintAdjacencyMatrix();
// Graph *g2 = g1->ToTransitiveClosure();
// cout << "M2:" << endl;
// g2->PrintIncidenceMatrix();
// g2->PrintAdjacencyMatrix();
// auto m2 = g2->GetIncidenceMatrix();
// auto m3 = Graph::MultiplyIncidenceMatrix(m1, m2);
// Graph *g3 = new Graph(m3);
// cout << "M3:" << endl;
// g3->PrintIncidenceMatrix();
// g3->PrintAdjacencyMatrix();
return 0;
}