Найти индексы всех седловых точек матрицы - 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;
        }
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы