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