·

Engenharia de Software ·

Estrutura de Dados

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Flood Fill ou preenchimento de inundação é um algoritmo que tem como objetivo alterar a informação de nós nodes que estão conectados Esse algoritmo é utilizado na ferramenta balde de softwares de desenho como paint e pode ser utilizado também em jogos como Go e Campo Minado para determinar quais posições serão limpas A proposta desta atividade é a implementação do algoritmo Flood Fill de forma simplificada utilizando Pilha e Fila para armazenamento dos pixels Normalmente este algoritmo é implementado utilizando recursividade mas se preferir pode utilizar um loop de repetição no lugar Segue abaixo um exemplo do funcionamento do algoritmo Imagine que cada quadrado na imagem é um pixel de uma imagem qualquer No exemplo a imagem possui um fundo inteiro branco e uma linha preta na diagonal Essa imagem pode ser representada por uma matriz de pixels no nosso código Informamos ao programa uma coordenada inicial para obter um ponto de partida e guardamos a cor de fundo em uma variável Esse ponto é armazenado numa PilhaFila e então começa o nosso loop de repetição O ponto inicial é desempilhadodesenfileirado e preenchido com a nova cor Em seguida empilhamosenfileiramos os 4 vizinhos laterais deste ponto Começamos o loop novamente e então pintamos o pixel que foi desempilhadodesenfileirado É importante que sempre ocorra uma verificação para checar se o pixel não está ultrapassando o limite da matriz Index Out Of Bounds e se a cor é igual a cor de fundo que foi armazenada no início do programa em uma variável no caso desse exemplo branco Só iremos pintar o pixel caso essa condição seja atendida Esse processo continua se repetindo enquanto a condição for atendida Pixels de cores diferentes do que a cor de fundo armazenada inicialmente são empilhadosenfileirados mas nunca são pintados pois não atendem as condições da checagem que é realizada dentro do loop descrita anteriormente O mesmo acontece com pixels inexistentes na imagem fora da matriz Por não atenderem as condições de checagem seus vizinhos também nunca são empilhadosenfileirados O algoritmo encerra quando todos os pixels tiverem sido preenchidos O trabalho terá duas versões a simples e a avançada As equipes podem escolher qual das versões preferem implementar Abaixo estão descritas as duas versões e suas especificações 1 Versão Simples Na versão simples as equipes poderão utilizar uma matriz 10x10 com valores inteiros conforme o a matriz de exemplo abaixo A matriz pode ser modificada de acordo com a preferência de cada equipe porém ela deve manter um tamanho de no mínimo 10x10 O mesmo exemplo com pixels é aplicado nesse caso porém ao invés de modificar a cor de um pixel você irá modificar para um novo valor por exemplo 2 Cada vez que um valor for modificado você deverá imprimir a matriz no console seguindo o padrão de impressão do exemplo abaixo 3 Especificações Gerais As equipes devem ter no mínimo 3 e no máximo 4 integrantes Equipes com mais ou menos integrantes que não foram previamente aprovados pela professora terão seus trabalhos desconsiderados O trabalho deve seguir os princípios da Programação Orientada a Objetos ou seja deve ser modulado em classes e não pode ser implementado todo na classe Main Além disso o algoritmo 4 deve ter duas formas diferentes de armazenamento dos valores um utilizando Pilha e outro utilizando Fila As equipes devem utilizar suas próprias estruturas Trabalhos que utilizarem as estruturas prontas do Java serão zerados Não é necessário utilizar recursividade na implementação é possível utilizar um loop de repetição Fica a critério de cada equipe decidir como prefere implementar Todas as equipes farão prova de autoria sobre a implementação realizada Os integrantes que não souberem explicar o funcionamento correto do código e especificações que forem questionadas terão suas notas zeradas Códigos copiados ou parafraseados da internet serão considerados como plágio e terão suas notas zeradas Assim como códigos iguais ou extremamente semelhantes entre as equipes serão questionados na prova de autoria e caso seja identificado plágio entre as equipes ambos os trabalhos serão zerados Os estudantes que não comparecerem sem justificativa formal no dia estipulado para prova de autoria terão suas notas zeradas