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;
}