Questo è il codice. Non l'ho scritto io.
codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N_MOSSE 8
int r[N_MOSSE][2] = {
{ 1, 1},
{ 1, 0},
{ 1,-1},
{ 0,-1},
{-1,-1},
{-1, 0},
{-1, 1},
{ 0, 1}
};
int nr, nc, superficie;
float altezza_media;
int totale;
void cerca_elemento_matrice(int x, int y, char **m);
char **MallocChar(int nr, int nc);
main()
{
char **m;
FILE *f;
int i=0, c;
int conta_isole=0;
char riga[30];
f = fopen("dati.txt", "r");
if (f== NULL)
{
printf("Errore apertura file\n");
exit(1);
}
else
fscanf(f, "%d %d ", &nr, &nc);
m=MallocChar(nr, nc);
while(fscanf(f, "%s",riga )!=EOF)
{
//m[r] = malloc (nc * sizeof (char));
strcpy( m[i],riga);
printf("%s\n", m[i]);
i++;
}
for(i=0;i<nr;i++)
for(c=0;c<nc;c++)
{
if(m[i][c]!='#' && m[i][c]!='0')
{
totale=0;
altezza_media=0.0;
superficie=0;
conta_isole++;
cerca_elemento_matrice( i ,c , m );
altezza_media=(totale/(float)superficie);
printf("%d %f\n", superficie, altezza_media);
}
}
getchar();
free(m[0]);
for (i=0; i< nr;i++)
{
free(m[i]);
}
free(m);
return 0;
}
void cerca_elemento_matrice(int x, int y, char **m)
{
if(x >= 0 && x < nr && y >= 0 && y < nc && m[x][y]!='#' && m[x][y]!='0')
{
int i;
totale+=(m[x][y]-'0');
superficie++;
m[x][y]='#';
for( i = 0; i < N_MOSSE; i++ )
cerca_elemento_matrice( x + r[i][0], y + r[i][1], m);
}
return;
}
char **MallocChar(int nr, int nc)
{
int i;
char **m;
m = (char **)malloc(nr * sizeof(char *));
for (i=0; i< nr;i++)
m[i] = (char *)malloc(nc * sizeof(char));
return m;
}