#include int dir [4][2] = {{0,-1}, {1,0}, {0,1}, {-1,0}}; int dados [2500]; int numDados; char imagen [51][51]; char prob [51][51]; int ancho, alto; int impreso [2500]; void BorrarX (int x, int y) { int cont; prob [y][x] = '.'; for (cont = 0; cont < 4; cont ++) { if ((x+dir [cont][0] >= 0) && (x+dir [cont][0] < ancho) && (y+dir [cont][1] >= 0) && (y+dir [cont][1] < alto)) { if (prob [y+dir [cont][1]][x+dir [cont][0]] == 'X') { /* prob [y+dir [cont][1]][x+dir [cont][0]] = '.'; */ BorrarX (x+dir [cont][0], y+dir [cont][1]); } } } } void ContarGrupos () { int x, y; int valor = 0; for (y = 0; y < alto; y ++) { for (x = 0; x < ancho; x ++) { if (prob [y][x] == 'X') { BorrarX (x, y); valor ++; } } } dados [numDados] = valor; } void CopiarProb (int x, int y) { int cont; if (imagen [y][x] == 'X') prob [y][x] = 'X'; imagen [y][x] = '.'; for (cont = 0; cont < 4; cont ++) { if ((x+dir [cont][0] >= 0) && (x+dir [cont][0] < ancho) && (y+dir [cont][1] >= 0) && (y+dir [cont][1] < alto)) { if (imagen [y+dir [cont][1]][x+dir [cont][0]] == 'X') { /* prob [y+dir [cont][1]][x+dir [cont][0]] = 'X'; */ CopiarProb (x+dir [cont][0], y+dir [cont][1]); } else if (imagen [y+dir [cont][1]][x+dir [cont][0]] == '*') CopiarProb (x+dir [cont][0], y+dir [cont][1]); } } } int main (void) { int x, y, x2, y2; FILE *fd; int contProb = 1; int indice; fd = fopen ("dice.in", "r"); fscanf (fd, "%d %d", &ancho, &alto); while (ancho || alto) { for (y = 0; y < alto; y ++) { fscanf (fd, "%s\n", imagen [y]); } numDados = 0; for (y = 0; y < alto; y ++) { for (x = 0; x < ancho; x ++) { for (y2=0; y2 < alto; y2 ++) for (x2 = 0; x2 < ancho; x2 ++) prob [y2][x2] = '.'; if ((imagen [y][x] == '*') || (imagen [y][x] == 'X')) { CopiarProb (x, y); ContarGrupos (); numDados ++; } } } printf ("Throw %d\n", contProb ++); for (x = 0; x < numDados; x ++) impreso [x] = 0; for (y = 0; y < numDados; y ++) { indice = 0; while ((indice < numDados) && impreso [indice]) indice ++; for (x = 0; x < numDados; x ++) { if ((dados [x] < dados [indice]) && !impreso [x]) indice = x; } impreso [indice] = 1; printf ("%d ", dados [indice]); } printf ("\n\n"); fscanf (fd, "%d %d", &ancho, &alto); } fclose (fd); return 0; }