Minimo locale

di il
3 risposte

Minimo locale

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

3 Risposte

  • Re: Minimo locale

    Ciao,
    hai commesso un errore di distrazione. Il confronto corretto è
    
    if(m[i][j] > m[k][h])
         flag = 2;
    
    mentre tu avevi messo
    
    if(m[i][j] > m[k][j])
         flag = 2;
    
  • Re: Minimo locale

    Grazie.
    Rischio sempre di perdere ore per cose del genere :/
  • Re: Minimo locale

    In effetti capita. L'unico suggeirmento che mi viene in mente è quello di dare nomi più espliciti alle variabili, cioè qualcosa più di a, b, c, ...

Devi accedere o registrarti per scrivere nel forum
3 risposte