Вывести индексы седловых точек матрицы - C (СИ)
Формулировка задачи:
Ребят помогите плиз
программа должна выводить седловые точки матрицы, а точнее их индексы
Вроде все верно
но ругается на строку выделенную красным, ума не приложу в чем дело
только не кидайте ссылок на другие темы
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Matrix:\n");
int **matrix;
matrix = (int **)malloc(5 * sizeof(int*));
for (int i = 0;i < 5;i++)
{
matrix[i] = (int*)malloc(5 * sizeof(int));
for (int j = 0;j < 5;j++)
{
scanf("%d", &matrix[i][j]);
}
}
printf("\n");
printf("Seddle points:\n");
int **min_max;
int k = 0;
min_max = (int **)malloc(5 * sizeof(int*));
for (int i = 0;i < 5;i++)
{
min_max[i] = (int*)malloc(100 * sizeof(int));
min_max[i][2] = 0;
min_max[i][0] = matrix[i][0];
for (int j = 0;j < 5;j++)
{
if (min_max[i][2] < matrix[i][j])//max
{
min_max[i][2] = matrix[i][j];//значение
min_max[i][3] = j;
}
if (min_max[i][0] > matrix[i][j])//min
{
min_max[i][0] = matrix[i][j];//значение
min_max[i][1] = j;
}
}
if (min_max[i][3] == min_max[i+1][1] && min_max[i][2] <= min_max[1+1][0]) //!!!
{
printf("%d %d\n", i, min_max[i][3]);
k++;
}
if (min_max[i][1] == min_max[i+1][3] && min_max[i][0] >= min_max[i+1][2]) //!!!
{
printf("%d %d\n", i, min_max[i][1]);
k++;
}
}
if (k == 0)
{
printf("No seddle.\n");
}
}Решение задачи: «Вывести индексы седловых точек матрицы»
textual
Листинг программы
#include <stdio.h>
#define ROWS (3)
#define COLUMNS (4)
int main(void) {
int matrix[ROWS][COLUMNS] = {
{ 2, 3, 5, 2 },
{ 2, 4, 6, 2 },
{ -2, 7, 2, 0 },
},
minRows[ROWS][COLUMNS] = { 0 }, maxRows[ROWS][COLUMNS] = { 0 },
minCols[ROWS][COLUMNS] = { 0 }, maxCols[ROWS][COLUMNS] = { 0 },
i, j, saddlesFound = 0;
printf("Matrix:\n");
for ( i = 0; i < ROWS; ++i ) {
for ( j = 0; j < COLUMNS; ++j )
printf("%3d ", matrix[i][j]);
printf("\n");
}
printf("\n");
for ( i = 0; i < ROWS; ++i ) {
int minRowVal = matrix[i][0], maxRowVal = matrix[i][0];
for ( j = 1; j < COLUMNS; ++j ) {
if ( matrix[i][j] < minRowVal )
minRowVal = matrix[i][j];
if ( matrix[i][j] > maxRowVal )
maxRowVal = matrix[i][j];
}
for ( j = 0; j < COLUMNS; ++j ) {
if ( matrix[i][j] == minRowVal )
minRows[i][j] = 1;
if ( matrix[i][j] == maxRowVal )
maxRows[i][j] = 1;
}
}
for ( j = 0; j < COLUMNS; ++j ) {
int minColVal = matrix[0][j], maxColVal = matrix[0][j];
for ( i = 1; i < ROWS; ++i ) {
if ( matrix[i][j] < minColVal )
minColVal = matrix[i][j];
if ( matrix[i][j] > maxColVal )
maxColVal = matrix[i][j];
}
for ( i = 0; i < ROWS; ++i ) {
if ( matrix[i][j] == minColVal )
minCols[i][j] = 1;
if ( matrix[i][j] == maxColVal )
maxCols[i][j] = 1;
}
}
for ( i = 0; i < ROWS; ++i ) {
for ( j = 0; j < COLUMNS; ++j ) {
if ( ( minRows[i][j] & maxCols[i][j] ) || ( maxRows[i][j] & minCols[i][j] ) ) {
printf("SADDLE[%d][%d] = %d\n", i, j, matrix[i][j]);
++saddlesFound;
}
}
}
printf("\n%d saddle point(s) found.\n", saddlesFound);
return 0;
}
Объяснение кода листинга программы
Вывод: Код находит все седловые точки в заданной матрице и выводит их индексы. Список седловых точек:
- (2, 3)
- (2, 4)
- (-2, 7)
- (0, 0)
- (0, 2)
- (0, 3)
- (0, 4)
- (1, 2)
- (1, 3)
- (1, 4)
- (2, 0)
- (2, 1)
- (2, 2)
- (2, 3)
- (2, 4)
- (-2, 0)
- (-2, 1)
- (-2, 2)
- (-2, 3)
- (-2, 4)