
Добавил:
vgost
t.me
Прошиваю/настраиваю роутеры в общаге МИЭТ, пишите в тг: t.me/aogudugnp
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include "Node.h"
#include <iomanip>
void OutputMatrix(const std::vector<std::vector<int>>& vec)
{
// int len = vec.size();
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
if (vec[i][j] == Limits(INF))
std::cout << std::setw(3) << "inf";
else
std::cout << std::setw(3) << vec[i][j];
// if (j + 1 != len)
std::cout << " ";
// else
}
std::cout << std::endl;
}
}
void OutputMatrixAndIndices(const std::vector<std::vector<int>>& vec, const std::vector<int>& rows, const std::vector<int>& cols)
{
int len = vec.size();
for (int i = 0; i < len; i++)
{
std::cout << std::setw(3) << cols[i];
if (i + 1 != len)
std::cout << " ";
else
std::cout << std::endl;
}
for (int i = 0; i < len; i++)
for (int j = 0; j < len; j++)
{
if (vec[i][j] == Limits(INF))
std::cout << std::setw(3) << "inf";
else
std::cout << std::setw(3) << vec[i][j];
if (j + 1 != len)
std::cout << " ";
else
std::cout << std::setw(3) << rows[i] << std::endl;
}
}
std::vector<std::vector<int>> deleteRowAndColFromMatrix(std::vector<std::vector<int>> vec,
std::vector<int>& realRows, std::vector<int>& realCols, int row, int col, std::vector<std::pair<int, int>>& path)
{
vec[col][row] = Limits(INF);
path.push_back(std::make_pair(realRows[row], realCols[col]));
vec.erase(vec.begin() + row);
for (int i = 0; i < vec.size(); i++)
vec[i].erase(vec[i].begin() + col);
realRows.erase(realRows.begin() + row);
realCols.erase(realCols.begin() + col);
OutputMatrixAndIndices(vec, realRows, realCols);
std::cout << std::endl << std::endl;
return vec;
}
int ReduceMatrix(std::vector<std::vector<int>>& vec)
{
int len = vec.size();
std::vector<int> rowReduction;
std::vector<int> colReduction;
//OutputMatrix(vec);
//std::cout << std::endl << std::endl;
for (int i = 0; i < len; i++)
{
int rowMin = vec[i][0];
for (int j = 1; j < len; j++)
{
if (vec[i][j] < rowMin)
{
rowMin = vec[i][j];
}
}
rowReduction.push_back(rowMin);
for (int j = 0; j < len; j++)
{
vec[i][j] -= (vec[i][j] == Limits(INF)) ? 0 : rowMin;
}
}
std::cout << "Редуцирование строк:" << std::endl;
OutputMatrix(vec);
std::cout << std::endl << std::endl;
for (int i = 0; i < len; i++)
{
int colMin = vec[0][i];
for (int j = 1; j < len; j++)
{
if (vec[j][i] < colMin)
{
colMin = vec[j][i];
}
}
colReduction.push_back(colMin);
for (int j = 0; j < len; j++)
{
vec[j][i] -= (vec[j][i] == Limits(INF)) ? 0 : colMin;
}
}
std::cout << "Редуцирование столбцов:" << std::endl;
OutputMatrix(vec);
std::cout << std::endl << std::endl;
int localLowerBound = 0;
for (int i = 0; i < len; i++)
{
localLowerBound += rowReduction[i];
localLowerBound += colReduction[i];
}
return localLowerBound;
}