viernes, 26 de junio de 2015

Luis Intriago

Grafo: Consiste en un conjunto de nodos(también llamados vértices) y un conjunto de arcos (aristas) que establecen relaciones entre los nodos.

Clasificación de grafos

  •  Dirigidos

Cada arco esta representado por un par ordenado de vértices, de forma que representan dos arcos diferentes.


  • No Dirigidos

En este el par de vértices que representa un arco no esta ordenado


Tipos de grafos

Grafo regular: Aquel con el mismo grado en todos los vértices.
Grafo bipartito: Es aquel con cuyos vértices pueden formarse dos conjuntos disjuntos de modo que no haya adyacentes entre vértices pertenecientes al mismo conjunto
Grafo completo: Aquel con una arista entre cada par de vértices
Grafo nulo: Se dice que un grafo es nulo cuando los vértices que lo componen no están conectados, esto es, que son vértices aislados.
Grafos Isomorfos: Dos grafos son isomorfos cuando existe una correspondencia biunívoca (uno a uno), entre sus vértices de tal forma que dos de estos quedan unidos por una arista en común.
Grafos Platónicos: Son los Grafos formados por los vértices y aristas de los cinco  sólidos regulares (Sólidos Platónicos), a saber, el tetraedro, el cubo, el octaedro, el dodecaedro y el icosaedro

Ejemplo:

Clase Principal

package Clases;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.*;

public class Principal extends JApplet{

 PanelDibujo pd;
 int max=0;
 JTextField valor;

 public void init(){
  
  pd=new PanelDibujo();
  add(pd);
  
  JPanel pdatos=new JPanel();
  
  JButton agregar=new JButton("Agregar Nodo");
  agregar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    if(max<10){
     try{
      Grafo gf=new Grafo(""+Integer.parseInt(valor.getText()));
      pd.getVgrafos().add(gf);
      pd.repaint();
      repaint();
      max++;
     }catch(NumberFormatException ne){
      JOptionPane.showMessageDialog(null, "Digite un numero valido");
     }
    } 
   }
  });
  
  valor=new JTextField(5);
  pdatos.add(new JLabel("Valor Vertice" +
    ""));
  pdatos.add(valor);
  pdatos.add(agregar);
  add(pdatos,BorderLayout.SOUTH);
  
 }

}

Clase PanelDibujo

package Clases;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Vector;

import javax.swing.*;

public class PanelDibujo extends JPanel {

 int x=150;
 int y=150;
 int ancho=30;
 int alto=30;
 public Vector<Integer> xvs;
 public Vector<Integer> yvs;
 public Vector<Grafo> vgrafos;
 int indice=0;

 public PanelDibujo(){
  vgrafos=new Vector();
  xvs=new Vector<Integer>();
  yvs=new Vector<Integer>();
  setDoubleBuffered(true);
 }

 public void paintComponent(Graphics grafico){
  super.paintComponents(grafico);
  Graphics2D g=(Graphics2D)grafico;
  if(vgrafos.size()!=0){
   g.setColor(Color.WHITE);
   g.fillRect(0, 0, getWidth(), getHeight());
   g.setColor(Color.BLACK);
   int radio = 100;
   float angulo = 360/10;
   angulo = (float) Math.toRadians(angulo);
   for(int i=indice;i<vgrafos.size();i++){
    int xv=(int)(x+radio*Math.cos(i * angulo));
    int yv=(int) (y- radio * Math.sin(i * angulo));
    xvs.add(xv);
    yvs.add(yv);
    indice++;
   }
  }
  for(int i=0;i<vgrafos.size();i++){
   for(int j=0;j<vgrafos.size();j++){
    g.setStroke(new BasicStroke(2));
    g.setColor(Color.BLACK);
    g.drawLine(xvs.get(i)+15,yvs.get(i)+15,xvs.get(j)+15,yvs.get(j)+15);
    g.setColor(Color.WHITE);
    g.fillOval(xvs.get(i), yvs.get(i), ancho, alto);
    g.setColor(Color.BLACK);
    g.drawOval(xvs.get(i),yvs.get(i), ancho, alto);
    g.drawString(""+vgrafos.get(i).obtenerDato(), xvs.get(i)+((ancho/2)-3), yvs.get(i)+((alto/2)+3));
    g.setColor(Color.WHITE);
    g.fillOval(xvs.get(j), yvs.get(j), ancho, alto);
    g.setColor(Color.BLACK);
    g.drawOval(xvs.get(j),yvs.get(j), ancho, alto);
    g.drawString(""+vgrafos.get(j).obtenerDato(), xvs.get(j)+((ancho/2)-3), yvs.get(j)+((alto/2)+3));
   }
  }
 }
 public Vector<Grafo> getVgrafos() {
  return vgrafos;
 }
 public void setVgrafos(Vector<Grafo> vgrafos) {
  this.vgrafos = vgrafos;
 }
}

Clase Grafo

package Clases;

import java.util.Vector;

public class Grafo {

 private String dato;

 public Grafo(String s){
  dato=s;
 }

 public String obtenerDato(){
  return dato;
 }
}



No hay comentarios.:

Publicar un comentario