Ciao a tutti, sto cercando di realizzare un programma che trovi i minimi locali di una matrice di dimensioni definite a priori.
Con minimo locale intendo un valore che è circondato da valori che sono tutti maggiori del valore stesso.
Per esempio, data questa matrice
0 2 1 5
1 4 6 4
7 1 6 9
9 9 9 9
il programma dovrebbe stampare che
[0][0] è minimo locale
[0][2] è minimo locale
[2][1] è minimo locale
Ho scritto il codice seguente, ma deve esserci un errore.
L'idea è, dato un elemento
[j], quella di partire da [i-1][j-1] ed arrivare a [i+1][j+1], controllando ogni volta che gli indici trovati si trovino all'interno della matrice.
Qualcuno saprebbe dirmi dove sbaglio?
Grazie!
#include <stdio.h>
#include <stdlib.h>
#define R 2
#define C 2
int main(void)
{
int m[R][C];
int i, j, k, h, flag = 0;
for(i=0; i < R; i++)
{
for(j=0; j < C; j++)
{
printf("Elemento [%d][%d]:\n", i, j);
scanf("%d", &m[i][j]);
}
}
for(i = 0; i < R; i++)
{
for(j = 0; j < C; j++)
printf(" %d ", m[i][j]);
printf("\n");
}
for(i = 0; i < R; i++)
{
for(j = 0; j < C; j++)
{
for(k = i-1; k <= i+1 && k < R && flag == 0; k++)
{
for(h = j-1; h <= j+1 && h < C && flag == 0; h++)
{
if(k >= 0 && h >= 0)
{
if(m[i][j] > m [k][j])
flag = 2;
}
}
}
if(flag == 0)
printf("\nLocal minimum: [%d][%d]", i, j);
flag = 0;
}
}
puts(" ");
return 0;
}