bom dia galera, tô com um problema aki, com um trabalho de grafos que tenho q entregar…
vou postar o código e a duvida depois do código, quem puder ajudar…
[code]public class Grafos {
private HashMap<Vértice, HashSet<Vértice>> dicionário = new HashMap<>();
private HashSet<Aresta> arestas = new HashSet<>();
public HashSet<Vértice> getVizinhos(Vértice vertice) {
return dicionário.get(vertice);
}
public Grafos() {
}
public void adicionaVértice(Vértice v) {
if (!dicionário.containsKey(v)) {
dicionário.put(v, new HashSet<Vértice>());
}
}
public void removeVértice(Vértice v) {
for (Vértice outro : dicionário.get(v)) {
dicionário.get(outro).remove(v);
}
dicionário.remove(v);
HashSet<Aresta> buffer = new HashSet<Aresta>();
for (Aresta a : arestas) {
if (a.liga(v)) {
buffer.add(a);
}
}
for (Aresta a : buffer) {
arestas.remove(a);
}
}
public void conectaVértices(Vértice v1, Vértice v2) {
dicionário.get(v1).add(v2);
dicionário.get(v2).add(v1);
arestas.add(new Aresta(v1, v2));
}
public void desconectaVértices(Vértice v1, Vértice v2) {
dicionário.get(v1).remove(v2);
dicionário.get(v2).remove(v1);
HashSet<Aresta> buffer = new HashSet<Aresta>();
for (Aresta a : arestas) {
if (a.liga(v1, v2)) {
buffer.add(a);
}
}
for (Aresta a : buffer) {
arestas.remove(a);
}
}
public int ordem() {
return dicionário.size();
}
public Collection<Vértice> vértices() {
return dicionário.keySet();
}
public Vértice umVértice() {
return (Vértice) vértices().toArray()[0];
}
@SuppressWarnings("unchecked")
public Collection<Vértice> adjacentes(Vértice v) {
return (Collection<Vértice>) dicionário.get(v).clone();
}
public int grau(Vértice v) {
return dicionário.get(v).size();
}
public String éCompleto() {
Integer nArestas = ordem() - 1;
for (Collection<Vértice> c : dicionário.values()) {
if (c.size() != nArestas) {
return ("Esse grafo não é completo");
}
}
return ("Esse grafo é completo");
}
public Collection<Vértice> fechoTransitivo(Vértice v) {
return procuraFechoTransitivo(v, new HashSet<Vértice>());
}
private Collection<Vértice> procuraFechoTransitivo(Vértice v,
Collection<Vértice> encontrados) {
encontrados.add(v);
for (Vértice outro : dicionário.get(v)) {
if (!encontrados.contains(outro)) {
procuraFechoTransitivo(outro, encontrados);
}
}
return encontrados;
}
public boolean éConexo() {
return vértices().equals(fechoTransitivo(umVértice()));
}
public String éÁrvore() {
if( éConexo() && (arestas.size() == ordem() - 1)){
return ("Esse grafo é árvore");
}
else{
return ("Esse grafo não é arvore");
}
}
@SuppressWarnings("unchecked")
public Collection<Aresta> arestas() {
return (Collection<Aresta>) arestas.clone();
}
public Vértice getVertice(String nomeDoVertice) {
for (Vértice v : dicionário.keySet()) {
if (v.getNome().equalsIgnoreCase(nomeDoVertice)) {
return v;
}
}
return null;
}
protected Aresta getArestaEntre(Vértice v1, Vértice v2) {
for (Aresta a : arestas) {
if (a.liga(v1, v2))
return a;
}
return null;
}
}
[/code]
public class JanelaTela extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private JButton btConectar, btDesconectar, btAdicionar, btRemover, btCancelar;
private JButton btCompletarGrafo, btGrafoÉCompleto, btGrafoÉArvore, btBuscaLargura, btVerticesPendentes;
private JLabel lbNomeVertice, lbLinhaCima, lbLinhaBaixo;
private JTextField txNomeVertice;
private JPanel pnSul, pnNorte, pnCentro;
private Grafos grafo;
private PainelDoGrafo painelDoGrafo;
private String situacao1 = "";
private String situacao2 = "";
private String situacao3 = "";
public JanelaTela(Grafos grafo){
this.grafo = grafo;
setTitle("Teoria dos Grafos");
setSize(800, 700);
// PAINEL NORTE DA TELA
pnNorte = new JPanel();
pnNorte.setLayout(null);
pnNorte.setBounds(0,0, 820, 70);
pnNorte.setBackground(Color.LIGHT_GRAY);
// PAINEL SUL DA TELA
pnSul = new JPanel();
pnSul.setLayout(null);
pnSul.setBounds(0, 600, 820, 100);
pnSul.setBackground(Color.lightGray);
// PAINEL CENTRAL DA TELA
pnCentro = new JPanel();
pnCentro.setLayout(new BorderLayout());
//CONSTROI AS JLABEL DOS PAINEIS
lbNomeVertice = new JLabel("Nome do vértice:");
lbNomeVertice.setBounds(310, 10, 150, 20);
lbLinhaCima= new JLabel("=================================================================================================================");
lbLinhaCima.setBounds(0, 60, 800, 10);
lbLinhaBaixo= new JLabel("=================================================================================================================");
lbLinhaBaixo.setBounds(0, 5, 800, 10);
// ADICIONA AS JLABEL NOS PAINEIS
pnSul.add(lbLinhaBaixo);
pnNorte.add(lbLinhaCima);
pnNorte.add(lbNomeVertice);
//CONTROI OS JTEXTFIELD
txNomeVertice= new JTextField();
txNomeVertice.setBounds(410, 10, 50, 20);
//ADICIONA O JTEXTFIELD NO PAINEL
pnNorte.add(txNomeVertice);
//CONTROI OS BOTÕES
btAdicionar = new JButton(" Adicionar ");
btAdicionar.setBounds(5, 35, 150, 20);
btRemover = new JButton(" Remover ");
btRemover.setBounds(160, 35, 150, 20);
btConectar = new JButton(" Conectar ");
btConectar.setBounds(315, 35, 150, 20);
btDesconectar = new JButton(" Desconectar ");
btDesconectar.setBounds(470, 35, 150, 20);
btCancelar = new JButton(" Sair ");
btCancelar.setBounds(625, 35, 150, 20);
//ADICIONA OS BOTÕES NOS PAINEIS
pnNorte.add(btCancelar);
pnNorte.add(btAdicionar);
pnNorte.add(btRemover);
pnNorte.add(btConectar);
pnNorte.add(btDesconectar);
// CONSTROI MAIS BOTÕES
btGrafoÉCompleto = new JButton(" Grafo Completo ");
btGrafoÉCompleto.setBounds(5, 20, 150, 20);
btGrafoÉArvore = new JButton(" Grafo árvore ");
btGrafoÉArvore.setBounds(160, 20, 150, 20);
btVerticesPendentes = new JButton(" Vértices pendentes ");
btVerticesPendentes.setBounds(315, 20, 151, 20);
btBuscaLargura = new JButton(" Busca em largura ");
btBuscaLargura.setBounds(470, 20, 150, 20);
btCompletarGrafo = new JButton(" Completar grafo ");
btCompletarGrafo.setBounds(625, 20, 150, 20);
//ADICIONA OS BOTÕES NOVAMENTE
pnSul.add(btGrafoÉCompleto);
pnSul.add(btGrafoÉArvore);
pnSul.add(btVerticesPendentes);
pnSul.add(btBuscaLargura);
pnSul.add(btCompletarGrafo);
// ADICIONA OS PAINEIS NA FRAME
getContentPane().add(pnNorte);
getContentPane().add(pnSul);
getContentPane().add(pnCentro);
//CONSTROI O PAINEL PARA INSERIR O GRAFOS
painelDoGrafo = new PainelDoGrafo(grafo);
//ADICIONA O GRAFO NO PAINEL
pnCentro.add(painelDoGrafo);
//TRATA OS EVENTOS DOS BOTÕES
btAdicionar.addMouseListener(new TratadorDoBotãoAdicionar(this));
btRemover.addMouseListener(new TratadorDoBotãoRemover(this));
btConectar.addMouseListener(new TratadorDoBotãoConectar(this));
btDesconectar.addMouseListener(new TratadorDoBotãoDesconectar(this));
btCompletarGrafo.addMouseListener(new TratadorDoBotãoCompletarOGrafo(this));
btGrafoÉCompleto.addActionListener(this);
btGrafoÉArvore.addActionListener(this);
btBuscaLargura.addActionListener(this);
btVerticesPendentes.addActionListener(this);
btCancelar.addActionListener(this);
}
public void actionPerformed(ActionEvent acao) {
if (acao.getSource()== btGrafoÉCompleto){
grafoCompleto();
}
else if (acao.getSource()== btGrafoÉArvore){
grafoArvore();
}
else if(acao.getSource()== btBuscaLargura){
buscaLargura();
}
else if (acao.getSource()==btVerticesPendentes){
verticesPendentes();
}
else if (acao.getSource()== btCancelar){
System.exit(0);
}
}
public void verticesPendentes(){
situacao3 = "grafo.grau()";
JOptionPane.showMessageDialog( null , " "+ situacao3 , " Situação do grafo",
JOptionPane.INFORMATION_MESSAGE );
atualizar();
}
public void buscaLargura(){
atualizar();
}
public void grafoArvore(){
situacao1 = grafo.éÁrvore();
JOptionPane.showMessageDialog( null , " "+ situacao1, " Situação do grafo",
JOptionPane.INFORMATION_MESSAGE );
atualizar();
}
public void grafoCompleto(){
situacao2 = grafo.éCompleto();
JOptionPane.showMessageDialog( null , " "+ situacao2, " Situação do grafo",
JOptionPane.INFORMATION_MESSAGE );
atualizar();
}
public void adicionaVértice() {
painelDoGrafo.adicionaVértice(new Vértice(txNomeVertice.getText()));
atualizar();
txNomeVertice.setText("");
}
public void removeVértices() {
painelDoGrafo.removerVértices();
atualizar();
}
public void conectaVértices() {
painelDoGrafo.conectaVértices();
atualizar();
}
public void desconectaVértices() {
painelDoGrafo.desconectaVértices();
atualizar();
}
private void atualizar() {
paint(getGraphics());
}
public static void main(String[] args) {
Metro metro = new Metro();
JanelaTela tl = new JanelaTela(metro);
tl.setVisible(true);
tl.setLocationRelativeTo(null);
tl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
se precisar coloco o resto das classes…