Удаление более мощной строки - C#
Формулировка задачи:
Имеется матрица(задана в виде списка). Элементы нули и единицы. Задание такое: если одна строка является подмножеством второй, то удаляется более мощная строка. Например, есть строки: первая 1 0 0 1 1 и вторая 0 0 0 1 1. Здесь мощность определяется индексами элементов, в которых значения равно 1. Т. е. смотрим индексы на которых стоят единицы в строках: первая строка {0, 3, 4}, вторая строка {3, 4}. Удаляется первая строка, т. к. она включает в себя элементы, которые есть во второй строке.
Подскажите, каким образом это реализовать?
List<List<int>> matrixA = new List<List<int>>() { new List<int>() { 1,0,0,1,1}, new List<int>(){ 0,0,0,1,1}, new List<int>(){ 1,0,1,1,0 }, new List<int>(){ 0,1,1,0,1 }, new List<int>(){ 0,1,0,0,1 }, new List<int>(){ 1,0,0,1,0 }, new List<int>(){ 0,0,0,1,1 }, new List<int>(){ 1,1,0,0,0 }};
Решение задачи: «Удаление более мощной строки»
textual
Листинг программы
static class ListExtensions { public static bool IsSupersetOf(this List<int> left, List<int> right) { for (int i = 0; i < left.Count; ++i) if (left[i] == 0 && right[i] == 1) return false; return true; } } public class Program { public static void Main(string[] args) { List<List<int>> matrixA = new List<List<int>>() { new List<int>() { 1,0,0,1,1}, new List<int>(){ 0,0,0,1,1}, new List<int>(){ 1,0,1,1,0 }, new List<int>(){ 0,1,1,0,1 }, new List<int>(){ 0,1,0,0,1 }, new List<int>(){ 1,0,0,1,0 }, new List<int>(){ 0,0,0,1,1 }, new List<int>(){ 1,1,0,0,0 }}; for (int i = 0; i < matrixA.Count; ++i) for (int j = 0; j < matrixA.Count; ++j) if (i != j && matrixA[i].IsSupersetOf(matrixA[j])) { matrixA.RemoveAt(i--); break; } Console.WriteLine(string.Join(Environment.NewLine, matrixA.Select(row => string.Join(" ", row)))); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д