Поиск седловых точек матрицы - C#
Формулировка задачи:
Дана целочисленная прямоугольная матрица. Определить:
• сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;
• номера строк и столбцов всех седловых точек матрицы.
ПРИМЕЧАНИЕ
Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке и максимальным — в j-м столбце.
Решение задачи: «Поиск седловых точек матрицы»
textual
Листинг программы
class Program
{
static void Main()
{
const int width = 5, height = 3;
int[,] array = new int[height,width];
Random rnd = new Random();
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
array[i, j] = rnd.Next(-10, 50);
}
}
ShowArray(array);
Console.WriteLine("==================================");
SumWhereIsNegativeElement(array);
Console.WriteLine("==================================");
SaddlePoints(array);
Console.ReadLine();
}
/// <summary>
/// Номера строк и столбцов всех седловых точек матрицы.
/// </summary>
private static void SaddlePoints(int[,] array)
{
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
if (!IsMinInRow(array, i, j) || !IsMaxInCol(array, i, j)) continue;
Console.WriteLine(" Элемент {0} является седловым.", array[i, j]);
Console.WriteLine("Строка: {0}\tстолбец: {1}", i + 1, j + 1);
}
}
}
private static bool IsMaxInCol(int[,] array, int i, int j)
{
for (int k = 0; k < array.GetLength(0); k++)
{
if (array[k, j] > array[i, j])
return false;
}
return true;
}
private static bool IsMinInRow(int[,] array, int i, int j)
{
for (int k = 0; k < array.GetLength(1); k++)
{
if (array[i, k] < array[i, j])
return false;
}
return true;
}
/// <summary>
/// Сумма элементов в тех строках, которые содержат хотя бы один отрицательный элемент
/// </summary>
private static void SumWhereIsNegativeElement(int[,] array)
{
for (int i = 0; i < array.GetLength(0); i++)
{
bool isNegative = false;
int sum = 0;
for (int j = 0; j < array.GetLength(1); j++)
{
sum += array[i, j];
if (array[i, j] < 0)
isNegative = true;
}
if (!isNegative) continue;
Console.WriteLine(" {0} строка имеет отрицательный элемент.", i + 1);
Console.WriteLine("Сумма элементов: {0}", sum);
}
}
private static void ShowArray(int[,] array)
{
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
Console.Write("{0}\t", array[i, j]);
}
Console.WriteLine();
}
}
}