21 lines
1.0 KiB
TeX
21 lines
1.0 KiB
TeX
Podemos simular diretamente o espalhamento da água. Cada posição molhada gera
|
|
novas posições molhadas segundo as regras do enunciado:
|
|
\begin{itemize}
|
|
\item se a célula imediatamente abaixo está dentro da matriz e é
|
|
\texttt{.}, ela também fica molhada;
|
|
\item se existe uma prateleira imediatamente abaixo da posição atual, a água
|
|
pode se espalhar para a esquerda e para a direita na mesma linha.
|
|
\end{itemize}
|
|
|
|
Para evitar processar a mesma posição várias vezes, sempre que uma célula
|
|
\texttt{.} fica molhada, trocamos seu caractere para \texttt{o} e a colocamos em
|
|
uma fila. Enquanto a fila não estiver vazia, removemos uma posição e tentamos
|
|
aplicar os movimentos descritos acima.
|
|
|
|
As prateleiras nunca viram água, portanto células com \texttt{\#} são apenas
|
|
obstáculos que podem sustentar o espalhamento lateral.
|
|
|
|
Como cada célula da matriz é inserida na fila no máximo uma vez, a complexidade
|
|
de tempo é $O(N \cdot M)$. A matriz e a fila também usam $O(N \cdot M)$ de
|
|
espaço.
|