Projeto Graphe: meu TCC sobre teoria dos grafos

Eu podia estar descansando, eu podia estar passeando, mas estou aqui programando e estudando :smiley:

Bom dia a todos. Estou aqui para apresentar meu projeto de conclusão do curso de Ciência da Computação, o Projeto Graphe. Trata-se de um aplicativo que visa facilitar o estudo de grafos, permitindo a criação visual dos vértices e arestas, além de obter informações relevantes ao estudo dos grafos, como matrizes de adjacência e incidência, dados sobre conexidade e conectividade. Outra característica é a possibilidade de executar algoritmos diversos sobre os grafos.

O aplicativo, hoje (12/10/2012) está na versão 0.8.4a. Para a versão 1.0, falta concluir algumas das análises disponíveis (como as de conexidade), e os algoritmos que estarão disponíveis já nesta versão (como as buscas em largura e profundidade), além é claro de algumas correções e melhorias.

Dúvidas, críticas e sugestões são bem vindas. Não sei se terei tempo de analisar e implantar cada uma delas (devo entregá-lo até o meio de novembro, daqui a um mês, mais ou menos), mas gostaria muito de saber a opinião de vocês.

Os arquivos estão disponíveis aqui: http://www.terraskilll.net23.net/

Observações:

  • evitei o uso de quaisquer componentes/bibliotecas externas (como a JGraph). Embora forneçam excelentes recursos, preferi diminuir a dependência do programa, permitindo a ele rodar somente com a jre instalada, além de poder estudar Swing e Java2D, dois assuntos que me interessam;
  • algumas das ideias do programa são baseadas em outros programas, dentre eles o JFlap, ImageJ, além de softwares específicos de grafos, como o Gephi, GraphAlg e Graph Editor;
  • há codigo derivado e adaptado de terceiros, inclusive de pessoal do GUJ. Onde notei esse uso, coloquei os devidos créditos, mas se estiver faltando alguma coisa, me avisem;

Autocrítica: alguns pontos do programa não me agradaram plenamente, mas ainda não consegui soluções rapidamente aplicáveis para eles. Possivelmente, analisando o código fonte, alguns de vocês podem chegar as mesmas conclusões. Dentre eles, destaco:

  • o elevado nº de iterações sobre os vetores de vértices e arestas, principalmente nas rotinas de desenho, seleção e movimentação, que comprometem o desempenho do aplicativo;
  • meu conhecimento em Java e OO ainda não é muito sólido, então algumas coisas podem não estar tão otimizadas ou simples quanto poderiam (como o uso de String em vez de StringBuilder). Ficarei grato com comentários a respeito;
  • o uso de Threads para alterar uma parte gráfica do sistema (no caso dos algoritmos, que adicionam/modificam elementos do grafo), que podem ser pausadas/reiniciadas. Falta um melhor tratamento contra erros nessa parte;

Estou postando este mesmo tópico no GUJ e no Guia do Hardware. Se alguém tiver contas nesses dois fóruns, sinta-se livre para comentar no que preferir.

Agradeço a atenção. Tenham um bom dia.

Abraços.

Faltou uns screenshots no seu site.

Bom dia a todos.

Estou disponibilizando uma nova versão com algumas das alterações previstas na minha lista anterior. Dentre elas, está a implementação dos algoritmos de percurso em largura e em profundidade. Vocês podem conferir em http://www.terraskilll.net23.net/. Adicionei também alguns screenshots do aplicativo no site.

Outras alterações:

  • na saída de texto, a rolagem para o final agora é automática;
  • adição de uma barra com botões “Novo”, “Abrir”, “Salvar”;
  • criação do menu Exibir, com opções de zoom, navegação entre as abas e exibir/ocultar valores e textos dos grafos;
  • botões e outros controles agora são habilitados conforme o caso (antes, ficava tudo habilitado);

Pendências:

  • carregamento dos ícones no OpenJDK/Linux;
  • ao gerar grafo, exibir todas as opções em um único dialog;
  • ocorre uma quebra de linha indesejada na saída de texto quando o texto a ser exibido é muito longo;
  • as ferramentas de alinhamento tem comportamento incorreto quando os elementos são redimensionados;
  • controlar a entrada nos edits de valor para aceitar somente números;

Próximos passos:

  • finalizar as análises de conectividade e conexidade;
  • finalizar os algoritmos de busca em largura e em profundidade;
  • atualizar o manual;

Abraços.

Parabéns cara, ta bastante profissional!
Trabalhei um tanto com grafos na graduação também, adoro o assunto!

Tchello
Valeu, cara. Ainda há muitas coisas a aparar mas é bom ver que o pessoal está gostando.

Fiz outro teste sobre o problema com os ícones dos botões. Instalei o Eclipse na VM do Ubuntu que tenho aqui e rodei o mesmo código, além de um exemplo para este caso. Rodando através do Eclipse, os ícones carregam normalmente, mas se eu gero o jar e executo, os ícones não carregam. Aparentemente, o OpenJDK não está conseguindo resolver os caminhos relativos para os arquivos de imagem. Como o Eclipse já faz isso sozinho, ao rodar por ele tudo fica ok, mas o jar gerado e executado diretamente não. Se eu coloco o caminho completo para o arquivo, funciona.

Testei as seguintes opções:

1 - forma atual: não funciona o OpenJDK/Ubuntu:
ImageIcon img = new ImageIcon(“img/icon_sl.png”);
2 - Caminho completo para o arquivo: funciona, mas tira a flexibilidade de usar caminhos relativos:
ImageIcon img = new ImageIcon("/home/usuario/Area de Trabalho/temp/img/icon_sl.png");
3 - Funciona no Eclipse, mas não fora dele, da mesma forma que o primeiro:
ImageIcon img = new ImageIcon("./img/icon_sl.png");

Na pior das hipóteses, vou gravar o caminho para pasta de imagens no arquivos properties e carregar de lá :frowning:

Alguma sugestão?

Abraços.