Найдите седловые точки из заданной матрицы, используя C

#c

#c

Вопрос:

Определите седловые точки в матрице.

Итак, допустим, у вас есть матрица, подобная такой:

9 8 7

5 3 2

6 6 7

У нее есть седловая точка в столбце 1, строка 2 со значением 5.

Это называется «седловой точкой», потому что она больше или равна каждому элементу в своей строке и меньше или равна каждому элементу в своем столбце.

Матрица может иметь ноль или более седловых точек.

Ваш код должен быть способен предоставлять (возможно, пустой) список всех седловых точек для любой заданной матрицы.

Матрица может иметь разное количество строк и столбцов (не квадратных).

 #include<stdio.h>
int r,c;
int main()
{
    int mat;
    printf("Enter the row and the column number:n");
    scanf("%d%d",amp;r,amp;c);
    int matrix[r][c];
    printf("Enter the elements of matrix:n");
    for(int i=0;i<r;i  )
    {
        for(int j=0;j<c;j  )
        {
            printf("Matrix[%d][%d]:",i,j);
            scanf("%d",amp;matrix[i][j]);
        }
    }
    for(int i=0;i<r;i  )
    {
        for(int j=0;j<c;j  )
        {
         mat = matrix[i][j];
         saddle(i,j,mat,matrix);
        }
    }
}
void saddle(int i,int j,int mat, int matrix[r][c])
{
    int c1=0,c2=0;
    for(int a=i;a<i 1;a  )
    {
        for(int b=0;b<c;b  )
        {
        if(mat>=matrix[a][b] amp;amp; matrix[i][j]==matrix[a][b])
            c1  ;
        }
    }
    if(c1==(c-1))
    {
    for(int a=0;a<r;a  )
    {
        for(int b=j;b<j 1;b  )
        {
        if (mat<=matrix[a][b] amp;amp; matrix[i][j]==matrix[a][b])
            c2  ;
        }
    }
    }
    if(c2==(r-1))
    printf("Saddle point at row %d, column %d, with value %dn",i,j,mat);

}
  

Я завершил код, и, на мой взгляд, он правильный, но он не дает желаемого результата. Пожалуйста, укажите на ошибки в моем коде и какие изменения я должен сделать, чтобы получить правильный вывод?

Комментарии:

1. Согласно вашему определению «седловой точки», вашей седловой функции всегда нужно будет просматривать только элементы в строке i или столбце j, но вы смотрите на другие элементы матрицы, которые не имеют значения.

2. вот пример src с другими правилами min / max: ссылка

Ответ №1:

Вам нужно перейти с if (mat >= matrix[a][b] amp;amp; matrix[i][j] == matrix[a][b]) на if (mat >= matrix[a][b] amp;amp; matrix[i][j] != matrix[a][b]) . И вам нужно перейти от if (mat <= matrix[a][b] amp;amp; matrix[i][j] == matrix[a][b]) к if (mat <= matrix[a][b] amp;amp; matrix[i][j] != matrix[a][b]) .

Проблема была в вас проверяли, если количество mat вы прошли равен самому себе, и оно всегда истинно, так что ваш счетчик c1 был неправильным.