#include #include #define N 1010 char field[N][N]; int ships = 0, row_of_ship = 0, col_of_ship = 0, max_row = 0, max_cols = 0, vyska = 0, sirka = 0; int test() { for (row_of_ship = 0; row_of_ship < max_row; row_of_ship++) { for (col_of_ship = 0; col_of_ship < max_cols; col_of_ship++) { if (field[row_of_ship][col_of_ship] == '#') { // nalezena lod, otestuj ji,jestli je to dobra // a jestli se s nikym nedotyka vyska = sirka = 0; // zjisti vysku lodi for (int i = row_of_ship; i < max_row; i++) { if (field[i][col_of_ship] == '#') { vyska++; } else { break; } } // zjisti sirku lodi for (int i = col_of_ship; i < max_cols; i++) { if (field[row_of_ship][i] == '#') { sirka++; } else { break; } } // otestuje, je-li to spravna lod - obdelnikova for (int i = row_of_ship; i < (row_of_ship + vyska); i++) { for (int t = col_of_ship; t < (col_of_ship + sirka); t++) { if (field[i][t] != '#') { printf("Bad placement.\n"); return 0; } } } // otestuje, jestli se nekdo dotyka for (int i = row_of_ship; i < (row_of_ship + vyska); i++) { if (col_of_ship > 0) { if (field[i][col_of_ship-1] == '#') { printf("Bad placement.\n"); return 0; } } if (col_of_ship + sirka < max_cols) { if (field[i][col_of_ship+sirka] == '#') { printf("Bad placement.\n"); return 0; } } } for (int i = col_of_ship; i < (col_of_ship + sirka); i++) { if (row_of_ship > 0) { if (field[row_of_ship-1][i] == '#') { printf("Bad placement.\n"); return 0; } } if (row_of_ship + sirka < max_cols) { if (field[row_of_ship+vyska][i] == '#') { printf("Bad placement.\n"); return 0; } } } // printf("Vymazlod?%i %i\n", vyska, sirka); // vse je spravne, vymaz lod a pricti 1 k poctu lodi for (int i = row_of_ship; i < (row_of_ship + vyska); i++) { for (int t = col_of_ship; t < (col_of_ship + sirka); t++) { field[i][t] = '.'; } } ships++; // printf("OK,konec lodi?%i \n", ships); } // if == '#' - nalezena lod } // for } // for printf("There are %i ships.\n", ships); return 0; } int main() { while (scanf("%i%i\n", &max_row, &max_cols) == 2) { // ukonceni cyklu if ((max_row == 0 && max_cols == 0)) { break; } // nulovani pole for (int i = 0; i < N; i++) { for (int t = 0; t < N; t++) { field[i][t] = 0; } } // nacteni celeho pole for (int i = 0; i < max_row; i++) { gets(field[i]); } // testovani poctu lodi test(); } // while return 0; }