Come ho detto usando l'algoritmo prima postato le modifiche sono irrisorie.
Questa è una possibile soluzione,ovviamente non ottimizzata in niente per lasciare lucida la comrensione dell'algoritmo,sopratutto su di un forum.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define MAPPA_SIZE 30
#define NUMERI 50
int main()
{
//init seme
srand((unsigned)time(NULL));
//creo ed azzero mappa
char mappa[MAPPA_SIZE][MAPPA_SIZE];
int iy,ix;
for (iy = 0; iy < MAPPA_SIZE ; iy++)
for (ix = 0; ix < MAPPA_SIZE ; ix++)
mappa[iy][ix] = ' ';
//setto valori casuali e calcolo centroide
int cx,cy;
int i;
for (i = 0 ,cx = 0, cy = 0 ; i < NUMERI ; i++)
{
do
{
iy = rand() % MAPPA_SIZE;
ix = rand() % MAPPA_SIZE;
}while (mappa[iy][ix] == 'X');
mappa[iy][ix] = 'X';
cx += ix;
cy += iy;
}
cx /= NUMERI;
cy /= NUMERI;
//disegno mappa
//linea alta
printf("+");
for (i = 0; i < MAPPA_SIZE ; i++)
printf("-");
printf("+\n");
//mappa
for (iy = 0; iy < MAPPA_SIZE ; iy++)
{
printf("|");
for (ix = 0; ix < MAPPA_SIZE ; ix++)
printf("%c",( (ix == cx) && ( iy == cy) ) ? 'C' : mappa[iy][ix]);
printf("|\n");
}
//linea bassa
printf("+");
for (i = 0; i < MAPPA_SIZE ; i++)
printf("-");
printf("+\n");
//calcolo e visualizzo distanze
double maxd = 0.0;
double mind = 999999.9;
double dist = 0.0;
int memy[2],memx[2];
for (iy = 0; iy < MAPPA_SIZE ; iy++)
{
for (ix = 0; ix < MAPPA_SIZE ; ix++)
{
if (mappa[iy][ix] == ' ') continue;
dist = sqrt( (double)(ix * ix + iy * iy));
if ( maxd < dist )
{
maxd = dist;
memy[0] = iy;
memx[0] = ix;
}
if ( mind > dist )
{
mind = dist;
memy[1] = iy;
memx[1] = ix;
}
printf("mappa[%2d][%2d] -> %lf\n",iy,ix,dist);
}
}
puts("\nAssoluto:");
printf("mappa[%2d][%2d] > %lf\n",memy[0],memx[0],maxd);
printf("mappa[%2d][%2d] < %lf\n",memy[1],memx[1],mind);
return 0;
}