Решение задачи №493 «Морской бой - 2» с ACMP
Условие задачи
«Морской бой» - игра для двух участников, в которой игроки по очереди называют координаты на неизвестной им карте соперника. Если у соперника по этим координатам имеется корабль, то корабль или его часть «топится», а попавший получает право сделать еще один ход. Цель игрока - первым поразить все корабли противника.
«Морской бой» очень популярен среди учеников одной физико-математической школы. Ребята очень любят в него играть на переменах. Вот и сейчас ученики Иннокентий и Емельян начали новую партию.
Правила, по которым ребята расставляют корабли перед началом партии, несколько отличаются от классических. Во-первых, игра происходит на поле размером N×M, а не 10×10. Во-вторых, число кораблей, их размер и форма выбираются ребятами перед партией - так играть намного интереснее.
Емельян уже расставил все свои корабли, кроме одного однопалубного. Такой корабль занимает ровно одну клетку.
Задана расстановка кораблей Емельяна. Найдите число способов поставить оставшийся однопалубный корабль. При этом учитывайте, что по правилам его можно ставить только в ту клетку, все соседние с которой не заняты. В этой задаче соседними считаются клетки, имеющие общую сторону.
Входные данные
Первая строка входного файла INPUT.TXT содержит два числа: N и M (1 ≤ N, M ≤ 100). Последующие N строк описывают игровое поле - каждая из них содержит M символов. Символом «.» (точка) обозначена свободная клетка, символом «*» (звездочка) - занятая кораблем.
Выходные данные
В выходной файл OUTPUT.TXT выведите ответ на задачу.
Решение на C++
#include <iostream>
using namespace std;
int main()
{
int n,m,x = 0;;
cin>>n>>m;
char y[106][106];
for (int i = 1; i<=n; i++){
for (int j = 1; j<=m;j++) {
cin>>y[i][j];
}
}
for (int i = 0; i <n+1; i++) {
y[i][0] = '.';
}
for (int i = 0; i <m+2; i++) {
y[0][i] = '.';
}
for (int i = 0; i <=m+1; i++) {
y[n+1][i] = '.';
}
for (int i = 0; i <n+1; i++) {
y[i][m+1] = '.';
}
for (int i = 1; i<=n; i++){
for (int j = 1; j<=m;j++) {
if (y[i][j] == '.' && y[i+1][j] == '.' && y[i-1][j] == '.' && y[i][j+1] == '.' && y[i][j-1] == '.') {
x++;
}
}
}
cout<<x;
}
Условия задач взяты с сайта acmp.ru