Добавил:
t.me Прошиваю/настраиваю роутеры в общаге МИЭТ, пишите в тг: t.me/aogudugnp Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

аисд / lab4 / MatrixOperations

.h
Скачиваний:
0
Добавлен:
17.08.2025
Размер:
2.84 Кб
Скачать
#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;

}
Соседние файлы в папке lab4