Найти индексы всех седловых точек матрицы - C#
Формулировка задачи:
Составить программу для ввода матрицы nхm. Вывести номера i, j всех седловых точек матрицы. Седловым называется элемент матрицы, наибольший в своем столбце и одновременно наименьший в строке, и наоборот.
помогите пожалуйста
Решение задачи: «Найти индексы всех седловых точек матрицы»
textual
Листинг программы
struct Point
{
public int x;
public int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return string.Format("i = {0}, j = {1}", x, y);
}
}
class Program
{
static void Main(string[] args)
{
int n = 5;
int m = 5;
int[,] matrix = GetRandomizeMatrix(n, m);
ShowMatrix(matrix, n, m);
List<Point> saddlePoints = GetSaddlePoints(matrix, n, m);
Console.WriteLine();
foreach(Point point in saddlePoints)
{
Console.WriteLine(point);
}
Console.ReadLine();
}
public static void ShowMatrix(int[,] matrix, int rows, int columns)
{
Console.WriteLine("\t\t*****Matrix******");
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
Console.Write(matrix[i, j] + "\t");
Console.WriteLine();
}
}
public static int[,] GetRandomizeMatrix(int n, int m)
{
int[,] matrix = new int[n, m];
Random random = new Random();
for (int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
matrix[i, j] = random.Next(0, 99);
}
}
return matrix;
}
public static List<Point> GetSaddlePoints(int[,] matrix, int rows, int columns)
{
List<Point> saddlePoints = new List<Point>();
int minValue = matrix[0,0],
maxValue = matrix[0,0];
Point minIndex = new Point(),
maxIndex = new Point();
List<Point> rowsPoints = new List<Point>();
List<Point> columnsPoints = new List<Point>();
int count = -1;
for (int j = 0; j < columns; j++)
{
minValue = matrix[++count, j];
maxValue = matrix[count, j];
minIndex = new Point(count, j);
maxIndex = new Point(count, j);
for (int i = 0; i < rows; i++)
{
if (minValue > matrix[i, j])
{
minValue = matrix[i, j];
minIndex = new Point(i, j);
}
if (maxValue < matrix[i, j])
{
maxValue = matrix[i, j];
maxIndex = new Point(i, j);
}
}
rowsPoints.Add(minIndex);
rowsPoints.Add(maxIndex);
}
count = -1;
for (int i = 0; i < rows; i++)
{
minValue = matrix[i, ++count];
maxValue = matrix[i, count];
minIndex = new Point(i, count);
maxIndex = new Point(i, count);
for (int j = 0; j < columns; j++)
{
if (minValue > matrix[i, j])
{
minValue = matrix[i, j];
minIndex = new Point(i, j);
}
if (maxValue < matrix[i, j])
{
maxValue = matrix[i, j];
maxIndex = new Point(i, j);
}
}
columnsPoints.Add(maxIndex);
columnsPoints.Add(minIndex);
}
for(int i = 0; i < columnsPoints.Count; i++)
if(rowsPoints[i].Equals(columnsPoints[i]))
saddlePoints.Add(rowsPoints[i]);
return saddlePoints;
}
}