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