You are on page 1of 42

ESCUELA POLITECNICA NACIONAL

FACULTAD DE INGENIERA DE
SISTEMAS

ALGORITMOS (SIC324)
DEBER No: 2

Alumno:

PROFESORA: Dra. Mara Gabriela Prez H.

FECHA DE ENTREGA: 11 de mayo de 2016


ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Deber de:

Algoritmos para rboles en general, binarios, de bsqueda binaria y AVL

Prctica No.: 02

Tema:

Estudio de los rboles binarios, sus particularidades y los recorridos para


solucionar ciertos problemas.

Objetivos:

aprender los conceptos claves relacionados con los rboles como


estructuras de datos
analizar los algoritmos relacionados con el uso de los rboles
Estudiar y analizar los mtodos existentes para recorrer los rboles

Marco terico:

Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos


subrboles. En un rbol binario, cada nodo puede tener cero, uno o dos hijos
(subrboles).
Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la
derecha como hijo derecho.

Ejemplos

Un rbol binario es una estructura recursiva. Cada nodo es la raz de su


propio subrbol y tiene hijos, que son races de rboles llamados subrboles
derecho e izquierdo del nodo, respectivamente. Un rbol binario se divide
en tres subconjuntos:
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

{R} Nodo raz


{I1, I2,...,In} Subrbol izquierdo de R
{D1, D2,...,Dn} Subrbol derecho de R

Ejemplo

Caractersticas

Son estructuras de control de informacin


Tienen no ms de 2 subrboles por nodo
Son recursivos
Pueden contener de 1 a 2n
Cada nodo puede tener 0, 1 o 2 hijos
Cada nodo puede ser la raz de un subrbol

Formas de Representacin

La representacin de un rbol binario en memoria se hace:


1. por medio de datos tipo punteros, tambin conocidos como variables
dinmicas o listas.
2. Por medio de arreglos.
La ms utilizada es la primera, puesto que es la ms natural para tratar este
tipo de estructuras.
Los nodos del rbol binario se representan como registros que contienen
como mnimo tres campos.
En un campo se almacena la informacin del nodo. Los otros se utilizan para
apuntar al subrbol izquierdo y derecho del subrbol en cuestin.

IZQ: Es el campo donde se almacena la direccin del subrbol izquierdo del


nodo en cuestin
INFO: Representa el campo donde se almacena la informacin del nodo.
Normalmente se almacena un valor simple: nmero o carcter. No obstante,
en la prctica se almacena cualquier tipo de dato.
DER: Campo donde se almacena la direccin del subrbol derecho del nodo
en cuestin.

Clasificacin de Arboles Binarios

Los arboles binarios se pueden clasificar en:


Distintos
Similares
Equivalentes
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Completos

Recorridos de los rboles binarios

Recorrido y llenado de un rbol binario. Tres maneras de recorrer un rbol:


en inorden, preorden y postorden.
1. PREORDEN (Raz-Izq.-Der)
Examinar la raz.
Recorrer el subrbol izquierdo
Recorrer el subrbol derecho
2. INORDEN (Izq.-Raz-Der.)
Recorrer el subrbol izquierdo
Examinar la raz.
Recorrer el subrbol derecho
3. POSTORDEN (Izq.-Der.-Raz)
Recorrer el subrbol izquierdo
Recorrer el subrbol derecho
Examinar la raz.
4. Segn el nivel: apuntar en orden descendente empezando desde
la raz.

Ejemplo de recorrido de un rbol binario

PREORDEN: ABDECFG
INORDEN: DBEAFCG
POSTORDEN: DEBFGCA
Por nivel: ABCDEFG

Operaciones bsicas de los arboles binarios

inicializacin. Encargada de inicializar la estructura para que


represente un rbol vaco.
Creacin
Insertar elementos que se gestionan en el rbol
Dar de baja los elementos (borrar)
Para gestionar la memoria dinmica como sucede con todas las
estructuras, se debe realizar el proceso de liberacin de memoria
previamente reservada

Arboles de bsqueda binaria


ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Consultar tema 2:
https://educacionvirtual.epn.edu.ec/course/view.php?
id=292&section=3
Arboles AVL

Consultar tema 2:
https://educacionvirtual.epn.edu.ec/course/view.php?
id=292&section=3

Ejercicios

1. Obtener el recorrido de los rboles siguientes, en preorden,


inorden y postorden y segn su nivel. Disear e implementar cada
uno de los algoritmos para su recorrido

a. rbol binario 1

Preorden: ABDGKCEHIFJ
Inorden: GKDBAHEICFJ
Postorden: KGDBHIEJFCA
Por Nivel: ABCDEFGHIJK

b. rbol binario 2

Preorden: ABDGEHICFJK
Inorden: GDBHEIAJKFC
Postorden: GDHIEBKJFCA
Por Nivel: ABCDEFGHIJK

2. Complementar el tema 2 (rboles), para ello, se pide investigar:


a. Como se representan los rboles generales en binarios
b. Como se representa un bosque en binarios
c. Como se representan los arboles binarios en memoria
3. Repasar las operaciones sobre arboles binarios
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

4. Escribir los algoritmos de insercin y borrado en arboles de BB,


dando ejemplos
5. Aplicando los arboles AVL insertar las claves 70, 82, 85, 68, 39
6. Disear e implementar los algoritmos de balanceo de los AVL.
7. Disear e implementar los algoritmos para grafos: Dikjstra, Floy y
Warshall

Desarrollo de la prctica:
1) Obtener el recorrido de los rboles siguientes, en preorden, inorden y
postorden y segn su nivel. Disear e implementar cada uno de los
algoritmos para su recorrido

rbol Binario 1
Preorden: ABDGKCEHIFJ
Inorden: GKDBAHEICFJ
Postorden: KGDBHIEJFCA
Por Nivel: ABCDEFGHIJK

rbol Binario 2
Preorden: ABDGEHICFJK
Inorden: GDBHEIAJKFC
Postorden: GDHIEBKJFCA
Por Nivel: ABCDEFGHIJK

Diseo

Preorden (APNODO)

APNODO Tipo Enlace


INFO Tipo Carcter
IZQ, DER Tipo Puntero

Si(APNODO != Null) entonces


Visitar APNODO {Escribir NODO^.INFO}
Regresar a Preorden con APNODO^.IZQ
{Llamada recursiva a preorden con la rama izquierda del nodo en
cuestin}
Regresar a Preorden con APNODO^.DER
{Llamada recursiva a preorden con la rama derecha del nodo en
cuestin}
FIN Si
FIN

Inorden(APNODO)

APNODO Tipo Enlace


INFO Tipo Carcter
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

IZQ, DER Tipo Puntero

Si(APNODO != Null) entonces


Regresar a Inorden con APNODO^.IZQ
{Llamada recursiva a inorden con la rama izquierda del nodo en
cuestin}
Visitar APNODO {Escribir NODO^.INFO}
Regresar a Inorden con APNODO^.DER
{Llamada recursiva a inorden con la rama derecha del nodo en
cuestin}
FIN Si
FIN

Posorden(APNODO)

APNODO Tipo Enlace


INFO Tipo Carcter
IZQ, DER Tipo Puntero

Si(APNODO != Null) entonces


Regresar a Posorden con APNODO^.IZQ
{Llamada recursiva a posorden con la rama izquierda del nodo en
cuestin}
Regresar a Posorden con APNODO^.DER
{Llamada recursiva a posorden con la rama derecha del nodo en
cuestin}
Visitar APNODO {Escribir NODO^.INFO}
FIN Si
FIN

IMPLEMENTACION

Clase Aplicacin

package com.epn;

import javax.swing.JOptionPane;

public class Aplicacion {

public static void main(String[] args) {

int opcion;//Crecacion de una variable entera para ingresar la opcion


en el menu

Arbol arb = new Arbol();//instanciar el objeto de clase arbol

do {

opcion = Integer
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

.parseInt(JOptionPane.showInputDialog(

null,

"Escoja la opcion que desea realizar en el arbol:\n1.-Crear un


arbol\n2.-Insertar un nodo\n3.-Recorrido Preorden\n4.-Recorrido
Inorden\n5.-Recorrido Postorden\n6.-Salida",

"MENU",

JOptionPane.INFORMATION_MESSAGE));//opciones del menu principal

switch (opcion) {// switch para ver que opcion del menu se escojio

case 1:

int sw = 0;

do {

int valor =

Integer.parseInt(JOptionPane.showInputDialog(

null, "Ingrese el valor a insertar "));//aqui se ingresa lo que


deseamos insertar en un nodo

arb.insertarNodo(valor);//llamamos a la funcion insertarNodo de la


clase arbol

sw = JOptionPane.showConfirmDialog(null,

"Desea seguir ingresando mas nodos");//un control para verificar si


deseamos ingresar mas nodos

} while (sw == JOptionPane.YES_OPTION);//mientras la opcion sea si se


seguira ingresando mas nodos

break;

case 2:

int valor =

Integer.parseInt(JOptionPane.showInputDialog(null,

"Ingrese el valor a insertar "));//aqui se ingresa lo que deseamos


insertar en un nodo

arb.insertarNodo(valor);//llamamos a la funcion insertarNodo de la


clase arbol

break;

case 3:
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

System.out.println("RECORRIDO EN PRETORDEN");//Si se selecciona la


opcion 3 imprime que se va a realizar un recorrido en preorden

arb.recorridoPreorden();//llamamos a la funcion recorridoPreorden de


la clase arbol

System.out.println("\n");

break;

case 4:

System.out.println("RECORRIDO EN INORDEN");//Si se selecciona la


opcion 4 imprime que se va a realizar un recorrido en inorden

arb.recorridoInorden();//llamamos a la funcion recorridoInorden de la


clase arbol

System.out.println("\n");

break;

case 5:

System.out.println("RECORRIDO EN POSTORDEN");//Si se selecciona la


opcion 5 imprime que se va a realizar un recorrido en posorden

arb.recorridoPostorden();//llamamos a la funcion recorridoPostorden de


la clase arbol

System.out.println("\n");

break;

case 6:

opcion = 6;

break;

default:

break;

} while (opcion != 6);

Clase Nodo
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

package com.epn;

public class Nodo {

private Nodo izq;//se crea un nodo izquierdo

private Nodo der;//se crea un nodo derecho

private int info;//se crea un nodo info que contiene la informacion

public Nodo(int inf) {//el constructor tiene como parametro la


informacion

super();

this.izq = null;//el nodo izquierdo es nulo

this.der = null;//el nodo derecho es nulo

this.info = inf;//la informacion se llena con el parametro ingresado

//metodos get y set para los nodos izq, der e info

public Nodo getIzq() {

return izq;

public void setIzq(Nodo izq) {

this.izq = izq;

public Nodo getDer() {

return der;

public void setDer(Nodo der) {

this.der = der;

public int getInfo() {

return info;

}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

public void setInfo(int info) {

this.info = info;

public void insertar(int valorInsertar) {//metodo para insertar que


tiene como parametro un entero

if (valorInsertar < this.info) {//si el valor a insertar es menor que


la informacion contenida en el nodo

if (this.izq == null) {//si el nodo izquierdo es nulo

this.izq = new Nodo(valorInsertar);//creamos el nodo izquierdo


insertamos otro nodo

} else {

this.izq.insertar(valorInsertar);//sino se inserta la informacion en


el mismo nodo

} else {

if (valorInsertar > this.info) {//si el valor a insertar es menor a la


informacion

if (this.der == null) {//si el nodo derecho es nulo

this.der = new Nodo(valorInsertar);//Si es asi se crea un nuevo nodo


en la derecha

} else {

this.der.insertar(valorInsertar);// sino insertamos la informacion en


el nodo derecho

Clase Arbol

package com.epn;
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

import javax.swing.JOptionPane;

public class Arbol {

private Nodo raiz;//se crea un nodo denominado raiz

public Arbol() {

super();

this.raiz = null;// El constructor inicializa el nodo raiz con null

public Nodo getRaiz() {// metodo get para el nodo raiz

return raiz;

public void setRaiz(Nodo raiz) {//metodo set para el nodo raiz

this.raiz = raiz;

public String toString() {

return "raiz " + this.raiz;//Este metodo sirve para imprimir el nodo


raiz

public void insertarNodo(int valorInsertar) {//metodo para insertar un


nuevo nodo

if (this.raiz == null) {// si el nodo raiz es nulo

this.raiz = new Nodo(valorInsertar);//se crea el nodo raiz con un


determinado valor que se pasa como parametro

} else {

this.raiz.insertar(valorInsertar);//sino es nulo el nodo raiz se


inserta un nuevo nodo

public void recorridoPreorden() {

ayudantePreorden(this.raiz);// el metodo recorridoPreorden llama a la


funcion ayudantePreorden
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

public void ayudantePreorden(Nodo nod) {// metodo que tiene como


parametro un nodo

if (nod == null) {// si el nodo es nulo el metodo no hace nada

return;

System.out.println(nod.getInfo());//se imprime la informacion


contenida en el nodo

ayudantePreorden(nod.getIzq());// se utiliza recursividad con el nodo


izquierdo

ayudantePreorden(nod.getDer());// se utiliza recursividad con el nodo


derecho

public void recorridoInorden() {

ayudanteInorden(this.raiz);// el metodo recorridoInorden llama al


metodo ayudanteInorden

public void ayudanteInorden(Nodo nod) {// metodo que tiene como


parametro un nodo

if (nod == null) {// si el nodo es nulo el metodo no hace nada

return;

ayudanteInorden(nod.getIzq());// se utiliza recursividad con el nodo


izquierdo

System.out.println(nod.getInfo());//se imprime la informacion


contenida en el nodo

ayudanteInorden(nod.getDer());// se utiliza recursividad con el nodo


derecho

public void recorridoPostorden() {

ayudantePostorden(this.raiz);// el metodo recorridoPostorden llama al


metodo ayudantePostorden

}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

public void ayudantePostorden(Nodo nod) {// metodo que tiene como


parametro un nodo

if (nod == null) {// si el nodo es nulo el metodo no hace nada

return;

ayudantePostorden(nod.getIzq());// se utiliza recursividad con el nodo


izquierdo

ayudantePostorden(nod.getDer());// se utiliza recursividad con el nodo


derecho

System.out.println(nod.getInfo());//se imprime la informacion


contenida en el nodo

2) Complementar el tema 2 (rboles), para ello, se pide investigar:

a) Como se representan los rboles generales en binarios


Se aplican unas operaciones que se deben aplicar para lograr la convertir
de rbol general a rbol binario
1. Enlazar los hijos de cada nodo en forma horizontal Hermanos
2. Relacionar en forma vertical el nodo padre con el hijo que se
encuentra ms a la izquierda. Adems, se debe eliminar el
vnculo de ese padre con el resto de sus hijos
3. Rotar el diagrama resultante, aproximadamente 45 grados hacia
izquierda, y as se obtendr el rbol binario correspondiente
b) Como se representa un bosque en binarios
Al igual se aplica algunos pasos que se deben aplicar para lograr la
conversin del bosque a un rbol binario
1. Enlazar en forma horizontal las races de los distintos arboles
generales
2. Relacionar los hijos de cada nodo los hermanos en forma
horizontal
3. Enlazar en forma vertical el nodo padre con el hijo que se
encuentra mas a la izquierda. Adems, se debe eliminar el vnculo
del padre con el resto de sus hijos.
4. Rotar el diagrama resultante aproximadamente 45 grados hacia la
izquierda y asi se obtendr el rbol binario correspondiente
c) Como se representan los arboles binarios en memoria
1. Por medio de datos tipos punteros, tambin conocidos como
variables dinmicas
2. Por medio de arreglos
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

3) Repasar las operaciones sobre arboles binarios

Una de las operaciones bsicas de un rbol binario es la creacin del


mismo en memoria
La otras operaciones que se pueden realizar son las siguientes:
Recorrer todos los nodos
Insertar un nuevo nodo
Elimina alguno de los existentes
Buscar un valor determinado

4) Escribir los algoritmos de insercin y borrado en arboles de BB, dando


ejemplos
Insercin un ABB

Anlisis
INSERCION_ABB(APNODO, INFOR)

APNODO Tipo Puntero


INFOR Tipo Entero
IZQ, DER Tipo Enlace
NODO Tipo Puntero

Diseo

INICIO
Si(INFOR < APNODO.INFO) entonces
Si(APNODO^.IZQ != Null) entonces
Crear(NODO) {Se crea un nuevo nodo}
Hacer NODO^.IZQ Null NODO^.DER Null
NODO^.INFO INFOR
APNODO^.IZQ NODO
Sino
Regresar a la INSERCION_ABB(APNODO^.IZQ, INFOR)
{Llamada Recursiva}
FIN Si
Sino
Si(INFOR> APNODO^.INFO) entonces
Si(APNODO^.DER != Null) entonces
Crear(NODO) {Se crea un nuevo nodo}
Hacer NODO^.IZQ Null NODO^.DER Null
NODO^.INFO INFOR
APNODO^.DER NODO
Sino
Regresar a la INSERCION_ABB(APNODO^.DER,
INFOR)
{Llamada Recursiva}
FIN Si
Sino
Escribir El nodo Ya se encuentra en el rbol
FIN Si
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

FIN SI
FIN

Ejemplo:
Insertar las siguientes claves en el Arbola Binario de Bsqueda que esta
vaco
120-87-43-65-140-99-130-22-56
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Eliminacion en un ABB

ELIMINACION_ABB(APNODO, INFOR)

APNODO Tipo Puntero


INFOR Tipo Entero
IZQ, DER, INFO Tipo Enlace
OTRO, AUX, AUX1 Tipo Puntero
BO Tipo Booleano

INICIO
Si(APNODO != Null) entonces
Si(INFOR < APNODO^.INFO) entonces
Regresar a ELIMINACION_ABB(APNODO^.IZQ, INFOR)
Sino
Si(INFOR>APNODO^.INFOR) entonces
Regresar a ELIMINACION_ABB(APNODO^.DER,
INFOR)
Sino
Hacer OTRO NODO
Si(OTRO^.DER = Null) entonces
Hacer APNODO OTRO^.IZQ
Sino
SI(OTRO^.DER = Null) entonces
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Hace APNODO OTRO^.DER


Sino
Hacer AUX APNODO^.IZQ Y
BO FALSO
Mientras (AUX^.DER !=
Null) Repetir
Hacer AUX1 AUX
AUX AUX^.DER
BO VERDADERO
FIN Mientras
APNODO^.NFO AUX^.INFO
OTRO AUX
Si(BO = VERDADERO)
entonces
Hacer
AUX1^.DER AUX^.IZQ
Sino
Hacer
APNODO^.IZQ AUX^.IZQ
FIN Si
FIN Si
FIN Si
Quitar(OTRO){Se libera el espacio de memoria}
FIN Si
FIN Si
Sino
Escribir La informacin a eliminar no se encuentra en el rbol
FIN Si
FIN

Ejemplo:
Eliminar las siguientes claves
22-99-87-120-140-135-56
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

5) Aplicando los arboles AVL insertar las claves 70, 82, 85, 68, 39

Inserta la claves en un rbol AVL


70, 82, 85, 68, 39
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

FE=0 FE=1
FE=2

70 70 70
FE=1 FE=1
82
82
FE=0

85
FE=0
82 FE=-1
82
FE=0 FE=0
FE=-1 FE=0
70 85
70 85
FE=0
68

FE=-2 FE=-1
82 82

FE=-2 FE=0 FE=0 FE=0


70 85 68 85

FE=-1
FE=0 FE=0
68
39 70
FE=0
39

6) Disear e implementar los algoritmos de balanceo de los AVL.

Analisis
INSETAR_BALANCEO (NODO,BO,INFOR)
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

NODO,OTRO,NODO1,NODO2 Tipo puntero


BO Tipo booleano
INFOR Tipo entero

Diseo

INICIO
Si(NODO != Null) entonces
Si(INFOR<NODO^.INFOR) entonces
Regresar a INSERTAR_BALANCEO(NODO^.IZQ,INFOR)
{Llamada recursiva}
SI(BO=VERDADERO) entonces
Si(NODO^.FE)
=1:Hacer NODO^.FE 0 y BO
FALSO
=0:Hacer NODO^.FE -1
=-1:Hacer NODO1 NODO^.IZQ
{Reconstruccion del arbol}
Si(NODO^.FE<=0) {Rotacion
II}
Hacer NODO^.IZQ
NODO1^.DER
NODO1^.DER NODO
NODO^.FE 0 y NODO
NODO1
{Termina la rotacion II}
Sino {Rotacion ID}
Hacer NODO2
NODO1^.DER
NODO^.IZQ
NODO2^.DER
NODO2^.DER NODO
NODO1^.DER
NODO2^.IZQ
NODO2^.IZQ NODO1
Si(NODO2^.FE=-1)
entonces
Hacer NODO^.FE
1
Sino
Hacer NODO^.FE
0
FIN Si
Si(NODO2^.FE=1)
entonces
Hacer NODO1^.FE
-1
Sino
Hacer NODO1^.FE
0
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

FIN Si
Hacer NODO NODO2
{Termina rotacio ID}
FIN Si
Hacer NODO^.FE 0 y BO
FALSO
FIN Si
FIN Si
Sino
Si(INFOR>NODO^.INFO) entonces
Regresar a
INSERTAR_BALANCEO(NODO^.DER,INFOR,BO)
{Llamada recursiva}
Si(BO=VERDADERO) entonces
Si(NODO^.FE)
=1:Hacer NODO^.FE 0
y BO FALSO
=0:Hacer NODO1^.FE
1
=-1:Hacer NODO1
NODO^.DER
{Reconstruccion del
arbol}
Si(NODO^.FE>=0)
{Rotacion DD}
Hacer NODO^.DER
NODO1^.IZQ
NODO1^.IZQ
NODO
NODO^.FE 0 y
NODO NODO1
{Termina la rotacion
DD}
Sino {Rotacion DI}
Hacer NODO2
NODO1^.IZQ
NODO^.DER
NODO2^.IZQ
NODO2^.IZQ
NODO
NODO1^.IZQ
NODO2^.DER
NODO2^.DER
NODO1
Si(NODO2^.FE=
1) entonces
Hacer
NODO^.FE -1
Sino
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Hacer
NODO^.FE 0
FIN Si
Si(NODO2^.FE=
-1) entonces
Hacer
NODO1^.FE 1
Sino
Hacer
NODO1^.FE 0
FIN Si
Hacer NODO
NODO2
{Termina rotacio
DI}
FIN Si
Hacer NODO^.FE 0 y
BO FALSO
FIN Si
FIN Si
Sino
Escribir La informacion ya se encuentra en el
arbol
FIN Si
FIN Si
Sino
CREAR(NODO)
Hacer NODO^.INFO INFOR NODO^.IZQ Null
NOSO^.DER Null
NODO^.FE 0 y BO VERDADERO
FIN Si
FIN
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

IMPLEMENTACION
CLASE APLICACIN
package com.epn;

import javax.swing.JOptionPane;

public class Aplicacion {

public static void main(String[] args) {

ArbolAvl avl = new ArbolAvl();//instanciar el objeto de


clase arbolAvl
int opcion;//Crecacion de una variable entera para ingresar
la opcion en el menu
do {
opcion =
Integer.parseInt(JOptionPane.showInputDialog(null,"Escoja la opcion
que desea realizar en el arbol:\n1.-Crear un arbol\n2.-Insertar un
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

nodo\n3.-Salida","MENU",JOptionPane.INFORMATION_MESSAGE));//opciones
del menu principal
switch (opcion) {// switch para ver que opcion del menu se
escojio
case 1:
int sw = 0;
do {
int valor =
Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el valor a
insertar"));//aqui se ingresa lo que deseamos insertar en un nodo
avl.insetar(valor);//llamamos a la funcion insertar de la
clase arbolAvl
sw = JOptionPane.showConfirmDialog(null,"Desea seguir
ingresando mas nodos");//un control para verificar si deseamos
ingresar mas nodos
} while (sw == JOptionPane.YES_OPTION);//mientras la opcion
sea si se seguira ingresando mas nodos
System.out.println("\t NUEVO ARBOL AVL");
avl.preOrden(avl.obtenerRaiz());//llamamos a la funcion
recorridoPreOrden de la clase arbolAvl
break;
case 2:
int valor
=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el valor a
insertar "));//aqui se ingresa lo que deseamos insertar en un nodo
avl.insetar(valor);//llamamos a la funcion insertar de la
clase arbolAvl
System.out.println("\t NUEVO ARBOL AVL");
avl.preOrden(avl.obtenerRaiz());//llamamos a la funcion
recorridoPreOrden de la clase arbolAvl
break;

case 3:
opcion = 3;
break;
default:
break;
}
} while (opcion != 3);
}

CLASE NODO
package com.epn;

public class Nodo {


int dato,fe; //se crea variables de tipo entero
Nodo izq,der; //se crea variables de tipo nodo
public Nodo(int dato) {
super();
this.dato = dato;
this.fe = 0;//el factor de equilibrio se iguala a cero
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

this.izq = null; //el enlace del nodo a la izq es igual a


nulo
this.der = null;//el enlace del nodo a la derecha es igual
a nulo
}

CLASE ABOLAVL
package com.epn;

import javax.swing.JOptionPane;
public class ArbolAvl {

private Nodo raiz; //se crea una variable de tipo nodo llamada
raiz

public ArbolAvl() {
super();
this.raiz = null; // El constructor inicializa el nodo raiz con
null
}
//metodos para obtener la raiz
public Nodo obtenerRaiz(){
return raiz;
}

public Nodo buscar(int dato, Nodo r){


if(raiz==null){ //si la raiz es igual a nulo
return null; // se retorna un valor nulo
}
else if(r.dato==dato){ //sino la informacion contenida de nodo
es igual al dato ingresado
return r;//se retorna el valor de nodo r
}
else if(r.dato<dato){//sino la informacion contenida de nodo es
menor al dato ingresado
return buscar(dato,r.der); //se relaiza una recursividad
con el dato y el enlace del nodo r a la derecha
}
else{ //sino es menor
return buscar(dato,r.izq); //se relaiza una recursividad
con el dato y el enlace del nodo r a la izq
}

}
//metodo para obtener el factor de equilibrio
public int obtenerFE(Nodo x){
if(x==null){ //si el nodo es igual a nulo
return -1; //estonces retorna cin un valor de -1
}else{//sino
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

return x.fe;//se retorna el nodo con su factor de


equilibrio
}
}
//rotacion simple izquierda izquierda
public Nodo IzqIzq(Nodo c){
Nodo aux=c.izq; //se crea un nodo aux y se inicializa con el
nodo c en su enlace a la izq
c.izq=aux.der; //el nodo c con enlace a la izq es igual al nodo
aux con enlae a la derecha
aux.der=c; // el aux con enlace a la derecha toma el valor de c
c.fe=Math.max(obtenerFE(c.izq), obtenerFE(c.der))+1; //se
obtiene el fe max de c restando el fe de la izq y de la derecha y
sumamos uno para que quede bien equilibrado
aux.fe=Math.max(obtenerFE(aux.izq), obtenerFE(aux.der))+1;//se
obtiene el fe max de aux restando el fe de la izq y de la derecha y
sumamos uno para que quede bien equilibrado
return aux; //retornamos el aux
}

public Nodo DerDer(Nodo c){


Nodo aux=c.der;//se crea un nodo aux y se inicializa con el nodo
c en su enlace a la dercha
c.der=aux.izq; //el nodo c con enlace a la dercha es igual al
nodo aux con enlae a la izq
aux.izq=c;// el aux con enlace a la izq toma el valor de c
c.fe=Math.max(obtenerFE(c.izq), obtenerFE(c.der))+1;//se obtiene
el fe max de c restando el fe de la izq y de la derecha y sumamos uno
para que quede bien equilibrado
aux.fe=Math.max(obtenerFE(aux.izq), obtenerFE(aux.der))+1;//se
obtiene el fe max de aux restando el fe de la izq y de la derecha y
sumamos uno para que quede bien equilibrado
return aux;//retornamos el aux
}

public Nodo IzqDer(Nodo c){


Nodo aux; //se crea un nodo aux
c.izq=DerDer(c.izq); //nodo c con enlace a la izq toma el valor
de la recursividad de una rotacion simple derecha derecha con el nodo
a la izq
aux=IzqIzq(c); //aux toma el valor de la recursividad de una
rotacion simple izq izq con el nodo
return aux; // se retorna el aux
}
public Nodo DerIzq(Nodo c){
Nodo aux; //se crea un nodo aux
c.der=IzqIzq(c.der);//nodo c con enlace a la izq toma el valor
de la recursividad de una rotacion simple izq izq con el nodo a la
derecha
aux=IzqIzq(c);//aux toma el valor de la recursividad de una
rotacion simple izq izq con el nodo
return aux;//se retorna el valor del aux
}

public Nodo Insertar(Nodo nuevo, Nodo subAr){


Nodo nuevoPadre=subAr; //se crea un nodo y se inicializa con el
subAr
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

if(nuevo.dato<subAr.dato){ //si la informacion de nuevo nodo es


menor que la informacion del subAr
if(subAr.izq==null){ //si el enlace del subAr de la izq es
igual a nulo
subAr.izq=nuevo; //el enlace izq del subAr toma el
valor de nuevo
}else{//sino
subAr.izq=Insertar(nuevo, subAr.izq);//el enlace izq
del subAr toma el valor de la recursividad con el nuevo y el subAr a
la izq
if((obtenerFE(subAr.izq) - obtenerFE(subAr.der)==2)){
//si el fe es igual a 2 entre el subAr de la izq y derecha
if(nuevo.dato<subAr.izq.dato){ //si la infomacion del
nuevo es menor que la infomacion del subAr a la izq
nuevoPadre=IzqIzq(subAr); //el nuevo padre toma
el valor de la recursividad de un rotacion simple izq izq con el subAr
}else{//sino
nuevoPadre=IzqDer(subAr); //el nuevo padre toma
el valor de la recursividad de un rotacion compuesta izq derecha con
el subAr
}
}
}
}else if(nuevo.dato>subAr.dato){//sino, la informacion de nuevo nodo
es mayor que la informacion del subAr
if(subAr.der==null){//si el enlace del subAr de la derecha es
igual a nulo
subAr.der=nuevo;//el enlace derecha del subAr toma el valor
de nuevo
}else{//sino
subAr.der=Insertar(nuevo, subAr.der);//el enlace derecha
del subAr toma el valor de la recursividad con el nuevo y el subAr a
la derecha
if(obtenerFE(subAr.der) - obtenerFE(subAr.izq)==2){//si el
fe es igual a 2 entre el subAr de la derecha y izq
if(nuevo.dato>subAr.der.dato){//si la infomacion del
nuevo es mayor que la infomacion del subAr a la derecha
nuevoPadre=DerDer(subAr);//el nuevo padre toma
el valor de la recursividad de un rotacion simple derecha derecha con
el subAr
}else{//sino
nuevoPadre=DerIzq(subAr);//el nuevo padre toma
el valor de la recursividad de un rotacion compuesta derecha izq con
el subAr
}
}
}
}else{//sino
JOptionPane.showMessageDialog(null, "Nodo Duplicado");//el nodo
ya existe y se imprime un mensaje
}
if((subAr.izq==null) && (subAr.der!=null)){//si el enlace del
subAr de la izq es igual a nulo y derecha es diferente de nulo
subAr.fe=subAr.der.fe+1;//el fe del subar va a ser igual a
el fe del subAr de la derecha mas 1
}else if((subAr.der==null)&&(subAr.izq!=null)){//sino, el enlace
del subAr de la derecha es igual a nulo y izq es diferente de nulo
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

subAr.fe=subAr.izq.fe+1;//el fe del subar va a ser igual a


el fe del subAr de la izq mas 1
}else{//sino

subAr.fe=Math.max(obtenerFE(subAr.izq),obtenerFE(subAr.der))
+1;//se obtiene el fe del subAr entre el subAr de la izq y derecha mas
1 para que quede bien quilibrado
}
return nuevoPadre;//se retorna el nuevo padre
}
//metodo para la insercion de un nodo
public void insetar (int dato){
Nodo nuevo = new Nodo(dato);// se crea un uevo nodo y se
inicializa con el valor ingresado
if(raiz==null){//si la raiz es igual a nulo
raiz=nuevo; //la raiz toma el valor del nuevo nodo creado
}else{//sino
raiz=Insertar(nuevo, raiz);//se realiza un recursividad con
el nuevo y la raiz
}

//METODOS DE LOS RECORRIDOS

public void preOrden(Nodo r){


if(r!=null){ //si el nodo r s diferente de nulo
System.out.print(r.dato + ", ");//se imprime el nodo
vivitado
preOrden(r.izq);//se realiza una recursividad con el nodo r
a la izq
preOrden(r.der);//se realiza una recursividad con el nodo r
a la derecha
}
}

7) Disear e implementar los algoritmos para grafos: Dikjstra, Floy y


Warshall

Analisis
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

ALGORITMO DIJKSTRA

N Numero de vertices
M Matriz dde nxn
S,D Arreglos

Diseo

DIJKSTRA(N)

INICIO
Agregar el vertice 1 a S
Repetir con i desde 2 a N
Elegirun vertice V en (V-S) tal que D[V] sea el valor minimo
Agregar V a S
Repetir para cada vertice W en (V-S)
Hacer D[W] minimo (D[W], D[V] + M[V,W])
FIN Repetir
FIN Repetir
FIN

IMPLEMENTACION
CLASE DIJKSTRA
/*
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package proyectoestructuras;

import java1.uac.Grafo;
import java1.uac.LimiteException;

/**
*
* @author Kevin
*/
public class Dijkstra {
private int m_Costo[][];
private int ultimo[];
private int D[];
private boolean F[];
private int s,n;

public Dijkstra(int s, Grafo<Integer> g) throws LimiteException{


n = g.ordenGrafo();
this.s=s;
m_Costo=insMatriz (g);
ultimo=new int [n];
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

D=new int[n];
F=new boolean [n];
}

public void caminoMinimos(){


for(int i=0;i<n;i++){
F[i] = false;
D[i] = m_Costo[s][i];
ultimo[i]=s;
}
F[s]=true;
D[s]=0;

for(int i=0;i<n;i++){
int v = minimo();
F[v]=true;

for(int w=0;w<n;w++){
if(!F[w]){
if((D[v]+m_Costo[v][w])<D[w]){
D[w]=D[v]+m_Costo[v][w];
ultimo[w]=v;
}
}
}
}
for(int i=0;i<n;i++){
System.out.println("costo minimo a "+i+": "+D[i]);
}

}
public int minimo(){
int mx = Grafo.inf;
int v=1;
for(int j=0;j<n;j++){
if(!F[j]&&(D[j]<=mx)){
mx=D[j];
v=j;
}
}
return v;
}

public int[][] insMatriz(Grafo<Integer> g) throws LimiteException{


int t=g.ordenGrafo();
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

m_Costo = new int [t][t];


for(int i=0;i<t;i++){
for(int j=0;j<t;j++){
m_Costo[i][j]=g.costoArco(i,j);
}
}
return m_Costo;
}

public void ruta(int j){


if(j!=s){
System.out.println("Se recorre de: "+ultimo[j]+" a "+j);
ruta(ultimo[j]);

}
}

CLASE APLICACIN

package proyectoestructuras;

import java.util.Scanner;
import java1.uac.Grafo;
import java1.uac.GrafoCol;
import java1.uac.LimiteException;

public class Aplicacion {

Grafo<Integer> crear() throws LimiteException{


Grafo<Integer> g = new GrafoCol<>();
//for (int i = 0; i < 5; i++) {
g.insVertice(0);
g.insVertice(1);
g.insVertice(2);
g.insVertice(3);
g.insVertice(4);

g.insArco(0, 1, 55);
g.insArco(0, 2, 110);
g.insArco(0, 3, 79);

g.insArco(1, 3, 70);

g.insArco(2, 0, 123);
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

g.insArco(2, 3, 40);
g.insArco(2, 4, 180);

g.insArco(3, 2, 89);
g.insArco(3, 4, 105);

return g;
}

/*public String mostrar(Grafo<Integer> g) throws LimiteException{


String con ="";
for (int i = 0; i < g.ordenGrafo(); i++) {
con+=" Vert "+g.infoVertice(i);
for (int j = 0; j < g.ordenGrafo(); j++) {
con+= " "+g.costoArco(i, j);
}
con+="\n";
}
return con;
}*/

public static void main(String[] args) throws LimiteException {


// TODO code application logic here
Aplicacion app=new Aplicacion();
//System.out.println(" "+g.mostrar(g.crear()));
Grafo<Integer> crear = app.crear();

Scanner sc = new Scanner(System.in);


System.out.println("VERTICE ORIGEN");
int origen = sc.nextInt();
Dijkstra camino = new Dijkstra(origen, crear);
camino.caminoMinimos();
System.out.println("RUTA ");
int ruta = sc.nextInt();
camino.ruta(ruta);

}
ALGORITMO FLOYD
Analisis

FLOYD(N)
N Numero de vertices
M Matriz dde nxn
I,K,J Tipo entero
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Diseo

INICIO
Repetir con K desde 1 hasta N
Repetir con I desde 1 hasta N
Repetir con K desde 1 hasta N
Si(
M IK + M KJ <M IJ ) entonces

Hacer
M IJ M IK + M KJ

FIN Si
FIN Repetir
FIN Repetir
FIN Repetir
FIN

FLOYD_GUARDAR_VERTICE(N)
N Numero de vertices
M,T Matriz dde nxn
I,K,J Tipo entero

INICIO
Repetir con K desde 1 hasta N
Repetir con I desde 1 hasta N
Repetir con K desde 1 hasta N
Si(
M IK + M KJ <M IJ ) entonces

Hacer
M IJ M IK +M KJ y T IJ K

FIN Si
FIN Repetir
FIN Repetir
FIN Repetir
FIN

IMPLEMENTACION
CLASE APLICACIN
package kevin.jimenez;

import javax.xml.crypto.dsig.CanonicalizationMethod;

public class Aplicacion {

public static void main(String[] args) {


// TODO Auto-generated method stub
long matrizA[][]={{0,3,4,999999999,8,99999999},
{999999999,0,999999999,999999999,5,999999999},
{999999999,999999999,0,999999999,3,999999999},
{999999999,999999999,999999999,0,999999999,999999999},
{999999999,999999999,999999999,7,0,3},
{999999999,999999999,999999999,2,999999999,0}};
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Algoritmo_Floyd ruta = new Algoritmo_Floyd();


System.out.println(matrizA);

CLASE ALGORITMO FLOYD


package kevin.jimenez;

public class Algoritmo_Floyd {

public String AlgoritmoFloyd(long [][] MAdy){


int vertices=MAdy.length;
long MatrizAdyacencia[][]=MAdy;
String caminos[][]=new String[vertices][vertices];
String caminosAuxiliares[][]=new String[vertices]
[vertices];
String caminoRecorrido="",cadena="",caminitos="";
int i,j,k;
float aux,aux1,aux2,aux3,minimo;

for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
caminos[i][j]="";
caminosAuxiliares[i][j]="";
}
}
for(k=0;k<vertices;k++){
for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
aux=MatrizAdyacencia[i][j];
aux1=MatrizAdyacencia[i][k];
aux2=MatrizAdyacencia[k][j];
aux3=aux1+aux2;

minimo=Math.min(aux, aux3);
if(aux!=aux3){
if(minimo==aux3){
caminoRecorrido="";
caminosAuxiliares[i][j]=k+"";
caminos[i]
[j]=caminosR(i,j,caminosAuxiliares,caminoRecorrido)+(k+1);
}
}
MatrizAdyacencia[i][j]=(long) minimo;
}
}
}

for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
cadena=cadena+"["+MatrizAdyacencia[i][j]+"]";
}
cadena=cadena+"\n";
}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

////////////////////////
for(i=0;i<vertices;i++){
for(j=0;j<vertices;j++){
if(MatrizAdyacencia[i][j]!=1000000000){
if(i!=j){
if(caminos[i][j].equals("")){
caminitos+="de ("+(i+1)+"---
>"+(j+1)+") irse por... ("+(i+1)+", "+(j+1)+")\n";
}
else{
caminitos+="de ("+(i+1)+"---
>"+(j+1)+") irse por... ("+(i+1)+", "+caminos[i][j]+", "+(j+1)+")\n";
}
}
}
}
}
return "la matriz de caminos mas cortos entre los
diferentes vertices es:\n"+cadena+
"\n los diferentes caminos mas cortos entre
vertices son:\n"+caminitos;
}

public String caminosR(int i, int k, String[][]


caminosAuxiliares, String caminoRecorrido){
if(caminosAuxiliares[i][k].equals("")){
return "";
}
else{
//recursividad al millon
caminoRecorrido+=caminosR(i,
Integer.parseInt(caminosAuxiliares[i][k].toString()),
caminosAuxiliares, caminoRecorrido)+
(Integer.parseInt(caminosAuxiliares[i][k].toString())+1)+",";
}
return caminoRecorrido;
}

ALGORITMO WARSHALL
Analisis

WARSHALL (N)
N Numero de vertices
C Matriz dde nxn
M,I,K,J Tipo entero

Diseo

INICIO
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Repetir con K desde 1 hasta N


Repetir con I desde 1 hasta N
Repetir con K desde 1 hasta N
Si(A[I,J]=0)entonces
A[I,J] A[I,K] y A[K,J]
FIN Si
FIN Repetir
FIN Repetir
FIN Repetir
FIN

IMPLEMENTACION
CLASE WARSHALL
package kevin.jimenez;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class warshall {

static int[][] warshall;


static int n = 0;
static BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));

public static void main(String[] args) {


// TODO Auto-generated method stub
System.out.print("Ingrese n (tamao de la matriz n X
n) :");
try {
n = Integer.parseInt(leer.readLine());
} catch (Exception e) {
}
int dato = 0;
warshall = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.println("Inserte la componente W(" + i + ")
(" + j + ")");
try {
dato = Integer.parseInt(leer.readLine());
} catch (Exception e) {
}
warshall[i][j] = dato;
}
}

//

for (int k = 0; k <= n - 1; k++) {


for (int i = 0; i <= n - 1; i++) {
for (int j = 0; j <= n - 1; j++) {
warshall[i][j] = funcionwar(i, j, k);
}
}
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

}
System.out.println();
System.out.println();
System.out.println("Matriz de adyacencia correspondiente: ");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(warshall[i][j]);
}
System.out.println();
}
}

public static int funcionwar(int i, int j, int k) {


if ((warshall[i][j] == 1) || ((warshall[i][k] == 1) &&
(warshall[k][j] == 1))) {
return 1;
} else {
return 0;
}
}

public static void algoritmo() {


warshall w = new warshall();
w.algoritmo();
}
}

Anlisis de resultados:

RECORRIDOS: POSORDEN, INORDEN Y PREORDEN


ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

ARBOL AVL
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

ALGORITMO DIJKSTRA
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

ALGORITMO FLOYD

ALGORITMO WARSHALL
ESCUELA POLITCNICA NACIONAL
FACULTAD DE INGENIERA DE SISTEMAS
INGENIERA DE SISTEMAS INFORMTICOS Y DE COMPUTACIN

Conclusiones y recomendaciones:

Cada algoritmo utiliza la una matriz de costo en donde ponen el valor


de cada arista a donde se dirigen.
En cada rbol se puede realizar su recorrido mediante tres recorridos
que sin: inorden posorden y preorden.
Es recomendable para encontrar el recorrido ms corto utilizar el
algoritmo de dijkstra
Se recomienda saber el funcionamiento de cada rbol que se estudi
como se construye

Bibliografa:
[1 G. &. Cairo, Arboles, de Estructura de Datos, Mexico, Mc Graw Hill, pp.
] 178-202.

[2 G. B. Van, Algoritmos Computacionales, U.S.A: Pearson Education, 2002.


]

You might also like