Для заданной целой матрицы размером 10 x 12 напечатать индексы всех ее седловых точек - C (СИ)
Формулировка задачи:
Элемент матрицы назовем седловой точкой, если он наименьший в своей строке и наибольший (одновременно) в своем столбце (или наоборот, наибольший в своей строке и наименьший в своем столбце). Для заданной целой матрицы размером 10 x 12 напечатать индексы всех ее седловых точек.
Решение задачи: «Для заданной целой матрицы размером 10 x 12 напечатать индексы всех ее седловых точек»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#define ROWS (10)
#define COLUMNS (12)
int main(void) {
setlocale(LC_ALL, "Russian");
int matrix[ROWS][COLUMNS] = {
{ 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
{ 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
{ -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
{ 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
{ 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
{ -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
{ 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
{ 2, 4, 6, 2, 2, 4, 6, 2, 2, 4, 6, 2 },
{ -2, 7, 2, 0,-2, 7, 2, 0,-2, 7, 2, 0 },
{ 2, 3, 5, 2, 3, 5, 2, 3, 5, 2, 3, 5 },
},
minRows[ROWS][COLUMNS] = { 0 }, maxRows[ROWS][COLUMNS] = { 0 },
minCols[ROWS][COLUMNS] = { 0 }, maxCols[ROWS][COLUMNS] = { 0 },
i, j, saddlesFound = 0;
printf("Матрица :\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("Седловая точка :[%d][%d] = %d\n", i, j, matrix[i][j]);
++saddlesFound;
}
}
}
printf("\n%d седловых точек найдено.\n", saddlesFound);
return 0;
}