#include "fstream.h" #include "iostream.h" #include "cstdlib" ifstream input("dice.in"); char map[51][51]; int xsize,ysize; int num = 0; void floodX(int x,int y) { if (map[y][x] != 'X') { return; } if (x < 0) return; if (x >= xsize) return; if (y < 0) return; if (y >= ysize) return; map[y][x] = '*'; floodX(x+1,y); floodX(x-1,y); floodX(x,y+1); floodX(x,y-1); } void floodRaute(int x,int y) { if (map[y][x] == '.') { return; } if (x < 0) return; if (x >= xsize) return; if (y < 0) return; if (y >= ysize) return; if(map[y][x] == 'X') { num++; map[y][x] = '*'; floodX(x+1,y); floodX(x-1,y); floodX(x,y+1); floodX(x,y-1); } map[y][x] = '.'; floodRaute(x+1,y); floodRaute(x-1,y); floodRaute(x,y-1); floodRaute(x,y+1); } int nr = 1; int dice[51*51]; int dnr; int vergleich(const void *a,const void *b) { int x,y; x = ((int*)a)[0]; y = ((int*)b)[0]; return x > y; } main() { int first; while(true) { first = 1; dnr = 0; input >> xsize >> ysize; if (!xsize && !ysize) { return 0; } cout << "Throw " << nr++ << "\n"; for(int i = 0; i < ysize;i++) { input >> map[i]; } for(int i = 0; i < 7;i++) dice[i] = 0; for(int i = 0; i < ysize;i++) { for(int j = 0;j < xsize;j++) { num = 0; floodRaute(j,i); if(num) dice[dnr++] = num; } } qsort(&dice,dnr,sizeof(int),vergleich); for(int i = 0; i < dnr;i++){ cout << dice[i]; if (i == dnr-1) { cout << "\n"; } else { cout << " "; } } cout << "\n"; } }