Добавление элемента в список list - C#
Формулировка задачи:
В список нужно на каждой итерации добавить новый элемент, при этом, сохранить добавленные раннее.
Но здесь почему-то в списке остается только элемент, добавленный на последней итерации. Остальные магическим образом исчезают. Переменная n показывает количество элементов в списке (1), а должно быть 5. Помогите разобраться в чем дело.
List<Tuple<int, int>> toDel = new List<Tuple<int, int>>(); toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
for (int x = 0; x < 5; x++)
{
GetMinstr(matrix);
GetRowReduction(matrix);
GetMinstolb(matrix);
GetReductionCollumn(matrix);
ShowMasInDataGrid(dataGridView1, matrix);
List<Tuple<int, int, int>> allZero = new List<Tuple<int, int, int>>();
int rowCount = matrix.GetLength(0);
int collumnCount = matrix.GetLength(1);
for (int i = 0; i < rowCount; i++)
for (int j = 0; j < collumnCount; j++)
if (matrix[i, j] != 500)
if (matrix[i, j] == 0)
{
int minIValue = Int32.MaxValue;
int minI = Int32.MaxValue;
int minJValue = Int32.MaxValue;
int minJ = Int32.MaxValue;
for (int a = 0; a < collumnCount; a++)
{
if (matrix[a, j] < minIValue && a != i) minIValue = matrix[a, j];
minI = a;
}
for (int a = 0; a < collumnCount; a++)
{
if (matrix[i, a] < minJValue && a != j) minJValue = matrix[i, a];
minJ = a;
}
allZero.Add(new Tuple<int, int, int>(minIValue + minJValue, i, j));
}
int k;
k = allZero.Count;
listBox1.Items.Add(k);
allZero.Sort((a, b) => a.Item1.CompareTo(b.Item1));
//ВОТ ЭТОТ СПИСОК
List<Tuple<int, int>> toDel = new List<Tuple<int, int>>();
List<Tuple<int, int>> optim = new List<Tuple<int, int>>();
//ДОБАВЛЯЮ ЭЛЕМЕНТ
toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
optim.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
int z = optim.Count;
//Удаление
int n = toDel.Count; //КОЛИЧЕСТВО ЭЛЕМЕНТОВ В СПИСКЕ
for (int i = 0; i < collumnCount; i++)
{
for (int j = 0; j < rowCount; j++)
{
if (i == toDel[n - 1].Item1) matrix[i, j] = 500;
if (j == toDel[n - 1].Item2) matrix[i, j] = 500;
matrix[toDel[n - 1].Item2, toDel[0].Item1] = matrix[0, 0];
}
}
for (int i = 0; i < rowCount; ++i)
{
List<string> aa = allZero.Select(t => t.ToString()).ToList();
List<string> bb = toDel.Select(t => t.ToString()).ToList();
//List<string> cc = toDel.Select(t => t.ToString()).ToList();
label1.Text = string.Join(" ", aa);
label2.Text = string.Join(" ", bb); //ПОКАЗЫВАЮ СПИСОК В ЛЕЙБЛЕ. ТАМ ВСЕГО ОДИН КОРТЕЖ
label3.Text = string.Join(" ", n);// КОЛИЧЕСТВО ЭЛЕМЕНТОВ В СПИСКЕ =1. ПОЧЕМУ?
}
}Решение задачи: «Добавление элемента в список list»
textual
Листинг программы
public static int[] GetMinstr(int[,] matrixa)
{
int rowCount = matrixa.GetLength(0);
int collumnCount = matrixa.GetLength(1);
int[] minstr = new int[5];
//Нахождение минимума по строкам
for (int i = 0; i < rowCount; ++i)
{
int minRow = matrixa[0, 0];
for (int j = 0; j < collumnCount; ++j)
{ if (matrixa[i, j] != 500) {
if (minRow > matrixa[i, j]) minRow = matrixa[i, j];
}
}
minstr[i] = minRow;
}
return minstr;
}
public static void GetRowReduction(int[,] matrixa)
{
//Редукция строк
int rowCount = matrixa.GetLength(0);
int collumnCount = matrixa.GetLength(1);
int[] b = GetMinstr(matrixa);
for (int i = 0; i < rowCount; ++i)
{
for (int j = 0; j < collumnCount; ++j)
{
if (matrixa[i, j] != 500) {
matrixa[i, j] = matrixa[i, j] - b[i]; }
}
}
}
public static int[] GetMinstolb(int[,] matrixa)
{
//List<int> minstolb = new List<int>();
int rowCount = matrixa.GetLength(0);
int collumnCount = matrixa.GetLength(1);
int[] minstolb = new int[5];
//Нахождение минимума по стролбцам
for (int i = 0; i < rowCount; ++i)
{
int minCol = matrixa[0, 0];
for (int j = 0; j < collumnCount; ++j)
{
if (matrixa[j, i] != 500) {
if (minCol > matrixa[j, i]) minCol = matrixa[j, i];
}
}
minstolb[i] = minCol;
}
return minstolb;
}
public static void GetReductionCollumn(int[,] matrixa)
{
//List<int> minstolb = new List<int>();
int rowCount = matrixa.GetLength(0);
int collumnCount = matrixa.GetLength(1);
int [] a = GetMinstolb(matrixa);
//Редукция столбцам
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
if (matrixa[i, j] != 500) {
matrixa[i, j] = matrixa[i, j] - a[j];
}
}
}