Si consideri un videogame dal nome “Godzilla Frenzy”. In tale gioco, il mondo è una griglia MxN e in ogni cella l'utente può costruire delle case o delle strade.
Mentre l'utente costruisce la sua città, Godzilla può arrivare improvvisamente e distruggere ciò che è stato costruito. Tuttavia, Godzilla si può muovere solo in orizzontale e in verticale e ha una paura tremenda delle strade e non vuole assolutamente attraversarle. Pertanto, Godzilla atterra su una casella scelta a caso e si può muovere solo sulle case, quando trova una strada (o il bordo della griglia) è costretto ad indietreggiare. Implementare una funzione ricorsiva che permette di calcolare, a partire da una casella di partenza (quella in cui atterra Godzilla), su quali caselle il mostro si può muovere.

la funzione deve quindi sostituire con delle g le C "racchiuse" da una cornice di S.

io ho ragionato così: dopo aver riempito la matrice in modo casuale, crea una funzione cont_mosse void di questo tipo

codice:
void cont_mosse(char mappap[][M], int coox, int cooy)
{
    
    if (mappap[coox][cooy] = 'C')
    {
        mappap[coox][cooy] = 'g';
        
        cont_mosse(mappap, coox, (cooy-1));
        cont_mosse(mappap, (coox-1), cooy);
        cont_mosse(mappap, (coox+1), cooy);
        cont_mosse(mappap, coox, (cooy+1));
        
        
    }

}
il programma però si blocca prima ancora di entrare nella ricorsione.

il codice completo è questo

codice:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

#define N 10
#define M 15

void riempi_mappa(char mappap[][M]);
void stampa_mappa(char mappap[][M]);
void cont_mosse(char mappap[][M], int coox, int cooy);

int main()
{
    srand(time(0));

    int i=0;

    char mappa[N][M];

    riempi_mappa(mappa);
    stampa_mappa(mappa);

    cont_mosse(mappa, 4, 4);
    printf("\n\n");
    stampa_mappa(mappa);


    _getch();
    return 0;
}

void riempi_mappa(char mappap[][M])
{
    int i=0, j=0;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            if (rand() % 2 == 0)
                mappap[i][j] = 'C';
            else
                mappap[i][j] = 'S';
        }
    }
}

void stampa_mappa(char mappap[][M])
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            printf(" %c ", mappap[i][j]);
        }
        printf("\n\n");
    }
}

void cont_mosse(char mappap[][M], int coox, int cooy)
{
    
    if (mappap[coox][cooy] = 'C')
    {
        mappap[coox][cooy] = 'g';
        
        cont_mosse(mappap, coox, (cooy-1));
        cont_mosse(mappap, (coox-1), cooy);
        cont_mosse(mappap, (coox+1), cooy);
        cont_mosse(mappap, coox, (cooy+1));
        
        
    }

}
non penso di aver sbagliato ragionamento, cioè se in quella casella c'è una C controlla quella sopra, poi quella sotto, poi quella a destra e a sinistra, e faccio la stessa cosa.