#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Функция для подсчета суммы лидирующих нулей в строке
int countLeadingZeros(const vector<int>& row) {
int count = 0;
for (int i = 0; i < row.size(); i++) {
if (row[i] == 0) {
count++;
} else {
break;
}
}
return count;
}
// Функция для перестановки столбцов в матрице
void permuteColumns(vector<vector<int>>& matrix) {
// Создаем вектор пар (сумма лидирующих нулей, индекс столбца)
vector<pair<int, int>> sums;
for (int i = 0; i < matrix[0].size(); i++) {
int sum = 0;
for (int j = 0; j < matrix.size(); j++) {
sum += countLeadingZeros(matrix[j]);
}
sums.push_back(make_pair(sum, i));
// Переставляем столбцы в порядке убывания суммы лидирующих нулей
sort(sums.rbegin(), sums.rend());
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[0].size(); j++) {
swap(matrix[i][j], matrix[i][sums[j].second]);
}
}
}
}
int main() {
// Пример матрицы 4x4
vector<vector<int>> matrix = {
{1, 0, 1, 0},
{1, 0, 0, 0},
{0, 1, 1, 0},
{1, 0, 1, 1}
};
// Вывод исходной матрицы
cout << "Исходная матрица:" << endl;
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[0].size(); j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
// Перестановка столбцов
permuteColumns(matrix);
// Вывод результирующей матрицы
cout << "Результирующая матрица:" << endl;
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[0].size(); j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}