Solução escrita por Arthur Lobo
Conhecimento prévio necessário:
Primeiro, vamos reduzir o problema inicial para um grafo: cada posição
representará um vértice e vamos criar arestas entre vértices que sào vizinhos e ambos não estão bloqueados, ou seja, se um está pintado o outro também será.
Formalmente, vamos adicionar uma aresta de
para
se
for um dos
vizinhos de
, ou seja, for um dos
e ambos não estão bloqueados.
Se o primeiro quadradinho a ser pintado for
, então todos os quadradinhos que
consegue chegar também serão pintados, ou seja, todos que estão na mesma componente conexa, que ele.
Portanto, basta montar esse grafo e depois rodar uma dfs partindo de
e ver o tamanho da sua componente conexa, que pode ser feito em
.
Clique aqui para conferir o código
