Найти индексы всех седловых точек матрицы - 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д