![]() |
|
||||
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Você está aqui: Java ::: Estruturas de Dados ::: Grafos |
||||||||||||||||
Como criar um grafo em Java - Estruturas de dados em Java para iniciantesQuantidade de visualizações: 936 vezes |
||||||||||||||||
Depois de estudar as listas, pilhas, filas e árvores (binárias ou não), o estudo de grafos é a próxima etapa no campo das estruturas de dados. E nesta dica eu mostrarei a descrição da estrutura de dados grafo e como criá-la na linguagem Java, passo-a-passo. Grafos são estruturas de dados formadas por um conjunto de vértices e um conjunto de arestas. Os vértices são os nós e as arestas são responsáveis por fazer as ligações entre esses nós. Vértice em inglês é vertex, enquanto aresta é edge. Alguns autores também gostam de chamar a aresta de arco (no caso dos grafos dirigidos, que veremos mais adiante). Antes de prosseguirmos, vamos ver um exemplo de grafo: ![]() Nesta imagem as cidades representam os vértices do grafo, enquanto as ligações entre elas são as arestas. Note que este é um grafo orientado, também chamado de dirigido ou digrafo, pois as arestas possuem uma direção. Dessa forma, a partir de Goiânia nós podemos ir para Cuiabá e Belém, sem caminho contrário. A partir de Belém podemos ir para Manaus e de Manaus para Goiânia. Veja que cada aresta possui um número associado. Em nosso caso, coloquei a distância entre as cidades (só como exemplo, é claro). Ao fazermos isso, cada aresta possui um peso, tornando o grafo um grafo valorado. Onde encontro exemplos e aplicações de grafos? Grafos são muito usados na representação de rotas de voos, grades curriculares, mapas de estradas, redes de computadores, mapas de metrô, relacionamento entre as pessoas em redes sociais, e muito mais. Algoritmos de percurso em grafos são estudados e aprimorados todos os dias. O algoritmo de Dijkstra, concebido pelo cientista da computação holandês Edsger Dijkstra em 1956 e publicado em 1959, soluciona o problema do caminho mais curto em um grafo dirigido ou não dirigido com arestas de peso não negativo. Implementação de grafos em Java Vamos programar agora? A seguir eu mostro como podemos reproduzir em código Java o grafo de cidades que vimos acima. Para isso usaremos programação orientada a objetos e ArrayLists. Em resumo nós criaremos as classes Grafo, Vertice e Aresta e usaremos objetos ArrayList para guardar os vértices no grafo e relacionar as arestas de um determinado vértice. No código eu mostro como é possível combinar grafos dirigidos e não dirigidos na mesma implementação. Vamos começar? A classe Aresta Para começarmos, veja o código para a classe Aresta, que possui duas variáveis do tipo Vertice represetando o vértice de origem e o de destino. Na nossa aplicação, seriam a cidade de origem e a cidade de destino. A variável peso representa a distância (não verificada) entre elas.
A classe Vertice Agora que já temos a classe Aresta, vamos passar a para a classe Vertice, que representa cada cidade no nosso exemplo. A primeira coisa a observar é que a classe Vertice possui como variáveis o nome da cidade e uma ArrayList de arestas. Note também o método adicionarAresta(), que permite informar o vértice de destino e o peso da aresta. O método removerAresta() recebe o vértice de destino e remove a aresta correspondente. Finalmente o método exibir() permite exibir todas as arestas de um determinado vértice.
A classe Grafo Agora que já temos as classe Aresta e Vertice, vamos criar a classe Grafo. Comece observando que esta classe possui uma ArrayList de vértices e duas variáveis boleanas indicando se o grafo possui pesos (valorado) e se é dirigido (digrafo) ou não. O método adicionarVertice() recebe o nome da cidade e permite criar um novo vértice no grafo. O método adicionarAresta() recebe dois vértices e os liga por meio de uma aresta. Note também a passagem do peso para a aresta. Se o grafo for dirigido, a aresta é inserida tanto para o vértice de origem quanto para o vértice de destino. Temos ainda os métodos removerAresta(), removerVertice(), buscarVerticeValor() e exibirVertices(), todos devidamente comentados para facilitar o seu entendimento.
A classe de teste Para finalizar, veja o código para a classe principal que nos permite criar um grafo digirido, com pesos para as arestas e representando exatamente as ligações da figura acima. Experimente trocar os valores e veja os resultados interessantes que obtemos.
Ao executar este código Java completo nós teremos o seguinte resultado: Goiânia --> Cuiabá (850), Belém (1740) Cuiabá --> (Vazio) Manaus --> Goiânia (730) Belém --> Manaus (420) |
||||||||||||||||
![]() |
||||||||||||||||
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
||||
Exercícios Resolvidos de Java - Como retornar o primeiro elemento de um array em JavaQuantidade de visualizações: 536 vezes |
||||
Pergunta/Tarefa: Escreva um programa Java que mostra como acessar e retornar o primeiro elemento de um array (vetor) Java. Sua saída deverá ser parecida com: Os elementos do vetor são: [9, 5, 3, 2, 4, 8] O primeiro elemento do array é: 9 Veja a resolução comentada deste exercício usando Java:
| ||||
Java ::: Reflection (introspecção) e RTI (Runtime Type Information) ::: Passos Iniciais |
||||
Como obter os modificadores dos métodos de uma classe ou interface usando o método getModifiers() da classe Method da linguagem JavaQuantidade de visualizações: 8507 vezes |
||||
O método getModifiers() da classe Method permite obter os modificadores (public, static, final, private, etc) de um determinado método. O retorno deste método é um valor inteiro que pode ser testado usando alguns métodos estáticos da classe Modifier. O exemplo a seguir mostra como listar todos os métodos públicos da classe javax.swing.JButton e seus modificadores:
Ao executar este exemplo nós teremos uma lista gigantesca de métodos declarados e herdados pela classe javax.swing.JButton. Veja: getAccessibleContext - public getUIClassID - public isDefaultButton - public isDefaultCapable - public removeNotify - public setDefaultCapable - public updateUI - public getUI - public setAction - public setModel - public setUI - public addActionListener - public addChangeListener - public addItemListener - public doClick - public doClick - public getAction - public getActionCommand - public getActionListeners - public getChangeListeners - public getDisabledIcon - public getDisabledSelectedIcon - public getDisplayedMnemonicIndex - public getHideActionText - public getHorizontalAlignment - public getHorizontalTextPosition - public getIcon - public getIconTextGap - public getItemListeners - public getLabel - public getMargin - public getMnemonic - public getModel - public getMultiClickThreshhold - public getPressedIcon - public getRolloverIcon - public getRolloverSelectedIcon - public getSelectedIcon - public getSelectedObjects - public getText - public getVerticalAlignment - public getVerticalTextPosition - public imageUpdate - public isBorderPainted - public isContentAreaFilled - public isFocusPainted - public isRolloverEnabled - public isSelected - public removeActionListener - public removeChangeListener - public removeItemListener - public setActionCommand - public setBorderPainted - public setContentAreaFilled - public setDisabledIcon - public setDisabledSelectedIcon - public setDisplayedMnemonicIndex - public setEnabled - public setFocusPainted - public setHideActionText - public setHorizontalAlignment - public setHorizontalTextPosition - public setIcon - public setIconTextGap - public setLabel - public setLayout - public setMargin - public setMnemonic - public setMnemonic - public setMultiClickThreshhold - public setPressedIcon - public setRolloverEnabled - public setRolloverIcon - public setRolloverSelectedIcon - public setSelected - public setSelectedIcon - public setText - public setVerticalAlignment - public setVerticalTextPosition - public update - public contains - public getLocation - public print - public getSize - public isOpaque - public disable - public enable - public firePropertyChange - public firePropertyChange - public firePropertyChange - public getRootPane - public getListeners - public paintImmediately - public paintImmediately - public repaint - public repaint - public revalidate - public setAlignmentX - public setAlignmentY - public addAncestorListener - public addNotify - public addVetoableChangeListener - public computeVisibleRect - public createToolTip - public getActionForKeyStroke - public getActionMap - public final getAlignmentX - public getAlignmentY - public getAncestorListeners - public getAutoscrolls - public getBaseline - public getBaselineResizeBehavior - public getBorder - public getBounds - public getClientProperty - public final getComponentPopupMenu - public getConditionForKeyStroke - public getDebugGraphicsOptions - public getDefaultLocale - public static getFontMetrics - public getGraphics - public getHeight - public getInheritsPopupMenu - public getInputMap - public final getInputMap - public final getInputVerifier - public getInsets - public getInsets - public getMaximumSize - public getMinimumSize - public getNextFocusableComponent - public getPopupLocation - public getPreferredSize - public getRegisteredKeyStrokes - public getToolTipLocation - public getToolTipText - public getToolTipText - public getTopLevelAncestor - public getTransferHandler - public getVerifyInputWhenFocusTarget - public getVetoableChangeListeners - public getVisibleRect - public getWidth - public getX - public getY - public grabFocus - public hide - public isDoubleBuffered - public isLightweightComponent - public static isManagingFocus - public isOptimizedDrawingEnabled - public isPaintingForPrint - public final isPaintingTile - public isRequestFocusEnabled - public isValidateRoot - public paint - public printAll - public putClientProperty - public final registerKeyboardAction - public registerKeyboardAction - public removeAncestorListener - public removeVetoableChangeListener - public requestDefaultFocus - public requestFocus - public requestFocus - public requestFocusInWindow - public resetKeyboardActions - public reshape - public scrollRectToVisible - public setActionMap - public final setAutoscrolls - public setBackground - public setBorder - public setComponentPopupMenu - public setDebugGraphicsOptions - public setDefaultLocale - public static setDoubleBuffered - public setFocusTraversalKeys - public setFont - public setForeground - public setInheritsPopupMenu - public setInputMap - public final setInputVerifier - public setMaximumSize - public setMinimumSize - public setNextFocusableComponent - public setOpaque - public setPreferredSize - public setRequestFocusEnabled - public setToolTipText - public setTransferHandler - public setVerifyInputWhenFocusTarget - public setVisible - public unregisterKeyboardAction - public add - public add - public add - public add - public add - public remove - public remove - public list - public list - public removeAll - public addPropertyChangeListener - public addPropertyChangeListener - public getComponent - public getComponentCount - public getComponents - public getFocusTraversalPolicy - public invalidate - public isFocusCycleRoot - public isFocusCycleRoot - public setFocusTraversalPolicy - public addContainerListener - public applyComponentOrientation - public areFocusTraversalKeysSet - public countComponents - public deliverEvent - public doLayout - public findComponentAt - public findComponentAt - public getComponentAt - public getComponentAt - public getComponentZOrder - public getContainerListeners - public getFocusTraversalKeys - public getLayout - public getMousePosition - public insets - public isAncestorOf - public isFocusTraversalPolicyProvider - public final isFocusTraversalPolicySet - public layout - public locate - public minimumSize - public paintComponents - public preferredSize - public printComponents - public removeContainerListener - public setComponentZOrder - public setFocusCycleRoot - public setFocusTraversalPolicyProvider - public final transferFocusDownCycle - public validate - public add - public remove - public toString - public getName - public contains - public size - public getLocation - public getParent - public setName - public list - public list - public list - public getSize - public location - public setSize - public setSize - public resize - public resize - public enable - public firePropertyChange - public firePropertyChange - public firePropertyChange - public firePropertyChange - public firePropertyChange - public action - public isEnabled - public isFocusOwner - public removePropertyChangeListener - public removePropertyChangeListener - public repaint - public repaint - public repaint - public getBackground - public getBounds - public getFocusCycleRootAncestor - public getFont - public getForeground - public getPeer - public getPropertyChangeListeners - public getPropertyChangeListeners - public getTreeLock - public final isDisplayable - public isMaximumSizeSet - public isMinimumSizeSet - public isPreferredSizeSet - public isShowing - public isVisible - public nextFocus - public setBounds - public setBounds - public setLocale - public setLocation - public setLocation - public dispatchEvent - public final getGraphicsConfiguration - public getMousePosition - public handleEvent - public isFocusable - public isLightweight - public isValid - public postEvent - public transferFocus - public transferFocusBackward - public addComponentListener - public addFocusListener - public addHierarchyBoundsListener - public addHierarchyListener - public addInputMethodListener - public addKeyListener - public addMouseListener - public addMouseMotionListener - public addMouseWheelListener - public bounds - public checkImage - public checkImage - public createImage - public createImage - public createVolatileImage - public createVolatileImage - public enableInputMethods - public getColorModel - public getComponentListeners - public getComponentOrientation - public getCursor - public getDropTarget - public getFocusListeners - public getFocusTraversalKeysEnabled - public getHierarchyBoundsListeners - public getHierarchyListeners - public getIgnoreRepaint - public getInputContext - public getInputMethodListeners - public getInputMethodRequests - public getKeyListeners - public getLocale - public getLocationOnScreen - public getMouseListeners - public getMouseMotionListeners - public getMouseWheelListeners - public getToolkit - public gotFocus - public hasFocus - public inside - public isBackgroundSet - public isCursorSet - public isFocusTraversable - public isFontSet - public isForegroundSet - public keyDown - public keyUp - public lostFocus - public mouseDown - public mouseDrag - public mouseEnter - public mouseExit - public mouseMove - public mouseUp - public move - public paintAll - public prepareImage - public prepareImage - public removeComponentListener - public removeFocusListener - public removeHierarchyBoundsListener - public removeHierarchyListener - public removeInputMethodListener - public removeKeyListener - public removeMouseListener - public removeMouseMotionListener - public removeMouseWheelListener - public setComponentOrientation - public setCursor - public setDropTarget - public setFocusTraversalKeysEnabled - public setFocusable - public setIgnoreRepaint - public show - public show - public transferFocusUpCycle - public wait - public final wait - public final wait - public final equals - public hashCode - public getClass - public final notify - public final notifyAll - public final | ||||
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
||||
Exercícios Resolvidos de Java - Pesquisando um valor em uma matriz de int e retornando o índice no qual o mesmo foi encontradoQuantidade de visualizações: 9381 vezes |
||||
Pergunta/Tarefa: Escreva um programa Java GUI ou console que declara, constrói e inicializa uma matriz de 5 inteiros. Em seguida peça ao usuário para informar um valor inteiro e informe se o valor lido está contido na matriz. Se o valor for encontrado na matriz, retorne seu índice (lembre-se de que os índices dos elementos em uma matriz Java começam em 0). A declaração, construção e inicialização da matriz pode ser feita da seguinte forma: // declara, constrói e inicializa uma matriz de 5 inteiros int valores[] = {4, 21, 8, 120, 1}; Resposta/Solução: Veja a resolução comentada deste exercício usando Java console:
Uma idéia na resolução deste exercício é inicializar a variável que guardará o índice do elemento pesquisado com o valor -1. Assim, se no final da pesquisa o valor ainda for -1, sabemos que o elemento não foi encontrado. | ||||
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |