GeraProva GeraProva Provas com IA para professores do Brasil
Computação3º anoBNCC EF15CO02Difícil⏱ longo

Desenhe um algoritmo em pseudocódigo que, dada uma matriz M[N][M] com 0 (livre) e 1 (bloqueado), identifique…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EF15CO02

Construir e simular algoritmos, de forma independente ou em colaboração, que resolvam problemas simples e do cotidiano com uso de sequências, seleções condicionais e repetições de instruções.

Fonte: Base Nacional Comum Curricular (MEC).

Questão

Desenhe um algoritmo em pseudocódigo que, dada uma matriz M[N][M] com 0 (livre) e 1 (bloqueado), identifique todas as regiões conectadas de células livres usando 4-vizinhança e retorne a lista dos tamanhos de cada região. Descreva as estruturas de dados, o pseudocódigo e a complexidade.

✍️ Questão dissertativa: veja abaixo a resposta esperada e a explicação.

Resposta esperada

Estruturas de dados: matriz M[N][M] de entrada, matriz booleana visited[N][M] inicializada em False, fila (queue) ou pilha (stack) para BFS/DFS, lista sizes para armazenar tamanhos. Pseudocódigo (BFS/Flood fill): sizes := [] visited := matriz N×M com False for i from 0 to N-1 do for j from 0 to M-1 do if M[i][j] == 0 and not visited[i][j] then count := 0 queue.enqueue((i,j)) visited[i][j] := True while queue not empty do (r,c) := queue.dequeue() count := count + 1 for (dr,dc) in [(1,0),(-1,0),(0,1),(0,-1)] do nr := r + dr; nc := c + dc if nr in [0..N-1] and nc in [0..M-1] and M[nr][nc] == 0 and not visited[nr][nc] then visited[nr][nc] := True queue.enqueue((nr,nc)) sizes.append(count) return sizes Análise de complexidade: Cada célula é visitada no máximo uma vez; cada aresta de vizinhança é considerada constante vezes. Tempo: O(N*M). Espaço extra: O(N*M) para visited e até O(N*M) na fila no pior caso. Observações: usar DFS (pilha/recursão) produz resultado equivalente; para grandes matrizes iterativas com fila são preferíveis para evitar estouro de pilha. Para 8-vizinhança, ajustar offsets de vizinhança.

Explicação

O algoritmo utiliza uma abordagem de busca em largura (BFS) para explorar todas as células livres conectadas, garantindo que cada célula seja visitada uma única vez, o que resulta em uma complexidade de tempo linear em relação ao número total de células. A estrutura de dados escolhida, como a matriz booleana para controle de visitação e a fila para gerenciar a exploração, é adequada para evitar revisitações e garantir a correta contagem das regiões. Além disso, a análise de complexidade considera tanto o tempo quanto o espaço, refletindo a eficiência do algoritmo em diferentes cenários.

Raio-X da questão

Dificuldade Difícil
Bloom Criar
Leitura alto
Discriminação alto
Peso pedagógico alto
Autonomia do enunciado completo
Cobertura da habilidade multipla
🧪 Simulado🩺 Diagnóstico🧮 Exige cálculo🏠 Cotidiano🔗 Interdisciplinar⭐ Representativa✍️ interpretativa🧩 desafio
🎯 Conceito central

algoritmo em pseudocódigo

📌 Objetivo

avaliacao

🧱 Pré-requisitos

estruturas de dados · algoritmos de busca

📚 Reveja

Revisar conceitos de 4-vizinhança e estruturas de dados em algoritmos.

⚠️ Erro mais comum

O aluno pode confundir a 4-vizinhança com a 8-vizinhança, resultando em contagem incorreta das regiões conectadas.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

pensamento_critico

🏫 Contexto

abstrato

Questões parecidas com resolução

Todas as questões de Algoritmos

🔎 Procurar outra questão

Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.

Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog

Ocorreu um erro inesperado. Recarregar X

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.