Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de Datos Orientada A Objetos
Estructura de Datos Orientada A Objetos
Estructura de Datos Orientada A Objetos
~2~
MEMORIAS:
Estudiante.
Estudiante.
Estudiante.
CARTAGENA – COLOMBIA
~3~
TABLA DE CONTENIDO
Unidad I
Unidad II
2. Pilas y Colas
2.1 Concepto de Pila.
2.2 implementación de clase pilas.
2.3 Ejercicios programas con pilas.
2.4 Concepto de Cola
2.5 Implementación de la clase cola.
2.7 Ejemplo de implementación de clase colas.
2.8 Cola de prioridades.
2.9 Ejemplo de implementación de clase colas de prioridades.
Unidad III
3 Listas Enlazadas
3.1 Definición las Listas enlazadas.
3.2. Implementación de listas enlazadas.
3.3. Definición de Listas enlazadas circulares.
3.4. Implementación de las listas circulares.
3.5. Ejemplo de listas enlazadas circulares.
3.6. Definición Listas doblemente enlazadas.
Unidad IV
4. Recursividad
4.1 Definición de Recursividad.
4.2 implementación de recursividad.
4.3 Ejemplo de recursividad.
~4~
Unidad V
5. Ordenamiento
5.1. Algoritmos de Ordenamientos
5.2. Algoritmo de ordenamiento Burbuja.
5.2.1. Ejemplo de Algoritmo de Burbuja.
5.3. Algoritmo de ordenamiento de Selección
5.3.1. Ejemplo de Algoritmo de selección.
5.4. Algoritmo de ordenamiento por Inserción.
5.4.1. Ejemplo de Algoritmo Inserción.
5.5. Otros métodos de ordenamiento.
5.6. Comparacion de algoritmos.
Unidad VI
6. Arboles
6.1. Concepto de Aboles.
6.2. Concepto Arboles Binarios.
6.2.1 Ejemplo de Arboles Binarios.
6.3 Como se representa un árbol binario.
6.4 Recorrido de un árbol binario.
6.4.1 Ejemplo de Recorrido de un árbol binario:
6.5 Árboles Binarios de Búsqueda.
6.6. Borrar un nodo de un árbol.
Unidad VII
7 Grafos
7.2 Concepto de Grafos.
7.3 Tipos de grafos.
7.4 Representación de Grafo.
7.3.1 Matriz de adyacencia.
7.3.2 Matriz de caminos.
7.5 Algoritmo del camino mínimo.
~5~
I
MANEJO DE VECTORES Y MATRICES (ARRAYS).
Objetivos de aprendizaje:
~6~
1.1 DEFINICION DE VECTOR:
Tipo nombre [ ];
Ejemplo:
Int edades [ ];
Ejemplo:
C++;
~7~
}
} Return par;
Class Sumapares
{
Prívate int valores [ ];
SumaPares (int [ ] val) {
For (int i=0; i > val.length; i++) {
Valores [i] = val [i];
}
}
Public long suma () {
long s=0; int i;
For (i=0; i< val.length; i++) {
If (valores [i] % 2 == 0) s+=valores [i];
} return s;
Num= numero;
~8~
While (num! =0)
r= num % 10;
num = num/10;
sw=0;
If (valores [i] = r) {
Sw=1;
Break;
If (sw==0) {
valores [c] = r;
C++;
} return c;
~9~
1.5 DEFINICION DE MATRIZ:
Ejemplo:
Int edades [ ] [ ];
Class mayores {
Int m, n;
This.m = m;
This.n= n;
~ 10 ~
This.matriz =matriz;
This.matriz = matriz;
Int [ ] vector ( ) {
} return v;
Class clase {
Int i, j;
~ 11 ~
For (j=0; j< asig; i++) {
Notas = n;
Codigo = c;
String s= “”;
~ 12 ~
s= s+ “promedio” +prom [i];
} return s;
~ 13 ~
II
PILAS Y COLAS
Objetivos de aprendizaje
Conocer y entender el concepto de pilas y colas como
estructuras para almacenamiento de la información.
Implementar pilas y colas en Java.
~ 14 ~
1.1. CONCEPTO DE PILAS:
Class pila {
Tope=n;
If (c==tope) return -1
~ 15 ~
Else
C++;
} return 1;
Else
C--;
} return 1;
String S= “”;
} return S;
~ 16 ~
2.3 EJERCICIOS PROGRAMAS CON PILAS:
1. Hacer una pila que cada vez que ingrese un dato ocupe la posición (0) de
la pila y al salir sea el primero que lo haga.
Class pila {
Tope=n;
Else {
C++;
} return 1;
Else
C--;
~ 17 ~
For (i=0; i<C; i++)
} return 1;
Public verultimo ( ) {
Class parqueadero {
Public parqueadero ( ) {
~ 18 ~
Public int ingresar (string placa) {
return -1;
Else {
c1++;
Else {
If (c2<=c3) {
c2++;
Else {
c3++;
} return 1;
Int sw=0;
~ 19 ~
If (sw==0) {
If (secc==1) {
c1--;
If (secc==2) {
c2--;
If (secc==3) {
c3--;
} return 1;
Switch (secc)
Case 1: for (i=0; i< c1; i++) s=s+ “\n” + secc1 [i];
Break;
Case 2: for (i=0; i< c2; i++) s=s+ “\n” + secc2 [i];
Break;
Case 3: for (i=0; i< c3; i++) s=s+ “\n” + secc3 [i];
Break;
~ 20 ~
} return s;
If (elemento%2==0) {
Else {
C1++;
Else {
Else {
C2++;
~ 21 ~
Public void extraer ( ) {
If (C1==C2) {
If (C1==0) return 1;
Else {
C1--;
Else {
If (c1>c2) {
C1--;
Else {
If (c1>c2) {
C1--;
Else {
C2--;
~ 22 ~
2.4 CONCEPTO DE COLAS:
Class cola {
Private int elemento [ ];
Private int c=0, tope;
~ 23 ~
Else {
c--;
For (int i=0; i<C-1; i++)
Elemento [i]= elemento [i+1];
Elemento[c]=0;
} return 1;
}
Public string mostrar ( ) {
String s= “”;
For (int i=0; i<c; i++) {
S=s+ “\n”+ elemento [i];
}
Return s;
}
Class cola {
Prívate int elemento [ ];
Prívate int c=0, tope;
Public cola (int n) {
Tope= n;
Elemento= new int [n];
}
Public int Ingresar (int elem) {
If (tope==c)
Return 0;
Else
{
For (i=c; i >0; i--)
Elemento [i] = element [i-1];
Elemento [0] = elem;
~ 24 ~
C++;
}
Public int extraer ( ) {
If (c==0)
Return 0;
Else
{
C--;
Elemento [c] =0;
}
Return 1;
}
Public mostrar ( ) {
String S= “”;
For (int i=0; i< c; i++) {
S=S+ “\n”+ element [i];
}
Return S;
Class carreras {
Prívate doublé cola 1[ ], cola 2[ ];
Prívate doublé cola 3[ ], cola 4[ ], cola 5[ ];
Prívate int c=0, tope;
Public cola (int n) {
Tope= n;
Cola 1= new double [n];
Cola 2= new double [n];
Cola 3= new double [n];
Cola 4= new double [n];
~ 25 ~
Cola 5= new double [n];
}
Public int ingresar (double codigo) {
Int car= int ((codigo%10000)/100);
Switch (car) {
Case 1: if (c1==tope)
Sw=1;
Else
{
Cola 1[c1] = codigo;
C1++;
}
Break;
Case 2: if (c2==tope)
Sw=1;
Else {
Cola 2[c2]= código;
C2++;
}
Break;
} if (sw==0) return 1 else return 0;
}
}
2.8 COLA DE PRIORIDADES:
~ 26 ~
Class cola_prioridades {
Tope= t;
Int li=0;
Else {
If (lista[i] % 2==0) {
Li=I;
Break;
C--;
~ 27 ~
Lista [c] = 0;
2. Una E.P.S. maneja tres tipos de afiliados los de nivel 1 que cancelan
por cada cita médica u odontológica 3 mil pesos los de nivel, 2
cancelan 8 mil pesos y los de nivel 3 que cancelan 17 mil pesos;
hacer un método que maneje el ingreso, la salida y muestre los
usuarios que están haciendo cola; para hacer cita se debe tener en
cuenta que primero serán atendidos los de nivel 3, luego los de nivel
dos y por último los de nivel 1, cada usuario se identifica con el
código donde el ultimo digito corresponde al nivel correspondiente al
nivel donde se encuentra dicho usuario Código de 5 dígitos.
Class eps {
Tope= n;
If (c==tope)
Return False
Else {
C++;
Return True;
~ 28 ~
}
If (c==0)
Return false;
Else {
If (cod%10==3) {
Pos= I;
Sw=1;
Break;
If (sw==0) {
{ If (codç%10==2)
Pos=i;
Sw=1;
Break;
~ 29 ~
C--;
Cola[c] = 0;
Return true;
String S= “”;
Return S;
~ 30 ~
III
LISTAS ENLAZADAS
Objetivos de aprendizaje
Conocer las listas como estructuras para almacenamiento de la
información.
~ 31 ~
3.1 DEFINICIÓN LAS LISTAS ENLAZADAS:
Cada nodo está conectado al siguiente por un solo enlace, a esta estructura de datos
se llama lista simplemente enlazada.
Class listasenl{
Elemento ( ) { };
~ 32 ~
Public int listaenl ( ) { }
q.dato= d;
q.siguiente= p;
p=q;
Int c=0;
Elemento x=p;
While(x! = null) {
C++;
X=X.siguiente;
Return ( );
Int sw=0;
Elemento x=p;
If (x.datos ==d) {
Sw=1;
Break;
} X=X.siguiente
~ 33 ~
If (sw==1) return x; else return p;
R= buscar (d2);
q.dato= r.dato;
q.siguiente=r.siguiente;
r.dato= d1;
r.siguiente=q;
Elemento x=p;
While (x.dato!=null)
{If (x.dato==d1)
{ x.dato= d2;
Break; }
x=x.siguiente;
R= rebuscar (d);
r.dato=q. dato;
r.siguiente=q.siguiente;
~ 34 ~
q=null;
String s= “”;
Element x=p;
While (x.dato!=null) {
S=s+ “”+x.dato;
Return s;
Class Empresa {
Elemento () { };
~ 35 ~
Public Empresa () { }
Public void agregar (long cod, String nom, in ted, double sal) {
q.codigo= cod;
q.nombre= nom;
q.edad= ed;
q.salario= sal;
q.siguiente= P;
p=q;
Double prom=0;
Int c= 0;
Elemento q=p;
While (q!=null) {
C++;
Q=q.siguiente;
Return prom/c;
String S= “”;
Elemento q=p;
While (q!=null) {
~ 36 ~
If (q.salario> promedio ()) {
q= q.siguiente;
Return S;
Int e=0;
Doublé m;
Elemento q=p;
While (q!=null) {
If (q.edad>e) {
m=q.salario;
e=q.edad;
q=q.siguiente;
Return m;
Int cod;
Elemento q=p;
~ 37 ~
While (q!=null) {
q=q.siguiente
Return c;
Elemento ( ) {};
~ 38 ~
dato= d;
siguiente= s;
Public circular ( ) { }
If (ultimo!=null) {
q.siguinte= Ultimo.siguiente;
Ultimo.siguiente= q;
Ultimo= q;
Else {
Ultimo= q;
Ultimo.siguiente= q;
If (ultimo!=null) {
q.siguiente= ultimo.siguiente;
Ultimo= ultimo.siguiente;
Else
~ 39 ~
Ultimo= q;
Ultimo.siguiente= q;
Elemento q= ultimo.siguiente;
Int n=1;
While (q!=ultimo) {
n++;
q=q.siguiente;
Return ;
If (ultimo=null) return 0;
Elemento q= ultimo.siguiente;
If (q==ultimo)
Ultimo= null;
Else
Ultimo.siguiente= q.siguiete;
Return dat;
~ 40 ~
3.5. EJEMPLO DE LISTAS ENLAZADAS CIRCULARES:
1. Un programa maneja una lista circular que contiene los datos de los
usuarios de telefonía celular de una empresa, los datos son: numero de
teléfono, tipo de plan (1. Prepago, 2. Pos pago). Numero de minutos (o
si es prepago), meses de mora (inicialmente igual a cero o cero si esta
al día).
>100 && <=500= 170* min; >500 && <=1000 = 130* min;
>1000=80*min;}
Class celular {
Elemento () { };
Elemento (long nc; int tp; doublé nm; int mm; doublé vp;
elemento s)
This.nc=nc;
~ 41 ~
This.tp=tp;
This.nm=nm;
This.mm=mm;
This.vp=vp;
Siguiente=s;
Int mn=0;
If (tp==1) vp=0;
Else
If (nm<=100) vp=200*nm;
Else
If (nm<=500) vp=170*nm;
Else
If (nm<=1000) vp=130*nm;
Else vp=80*nm;
If (ultimo!=null)
~ 42 ~
{ q.siguiente=ultimo.siguiente;
Ultimo.siguiente= q;
Else
Ultimo= q;
Ultimo.siguiente= q;
String s= “”;
Else
Elemento q= ultimo.siguiente;
If (t==1) {
If (q. mora>=1) {
s=s+ “\n”+q.nc;
q=q.siguiente;
if (t==1&& q.mm>=1) {
s+= “\n”+q.nc;
~ 43 ~
Else
If (q.mm==0)
S+= “\n”+q.nc;
Return s;
q.mm++;
if (q.mm!=0)
q=mm--;
~ 44 ~
IV
RECURSIVIDAD
Objetivos de aprendizaje
~ 45 ~
4.1 DEFINICIÓN DE RECUERSIVIDAD (RECURSION):
Long fact.=1;
For= fact.*i;
} Return fact.;
If (n==0||n==1) return 1;
Else
~ 46 ~
}
Long sum=0;
Return sum;
If (n=0)
Return 0;
Else
(Método no recursivo):
If(n==1||n==2) return 1;
Else {
~ 47 ~
For (int i=3; i<=n; i++)
Prim=ult;
Ult= sig;
Sig=prim + ult;
Return sig;
(Método recursivo):
If (n<2) return n;
Else {
(Método no recursivo):
Long s=0;
S+ = y;
Return s;
(Método recursivo):
~ 48 ~
Public long producto (int x; int y) {
If (y==0) return 0;
Else {
(Método no recursivo):
If (n % i==0) {
(Método recursivo):
Else {
Else {
~ 49 ~
Else return primo (i+, n);
4. Hacer un método recursivo de división (x/y => x debe ser mayor que y).
(Método recursivo):
If (x<=0) break;
Else {
x=x-y;
c++;
Return c;
While (x>0) {
C++;
x=x-y;
~ 50 ~
Return c;
(Método recursivo):
If (x<=0) return c;
Else {
C++;
Int c=0;
Sw=0;
If (i % j==0) {
Sw=1;
Break;
If (sw==0) {c++;}
Return i;
~ 51 ~
}
(Método no recursivo):
Long sum=0;
sum= sum+i;
} Return sum;
(Método recursivo):
If (n==0)
Return 0;
Else
~ 52 ~
V
ORDENAMIENTO
Objetivos de aprendizaje
Conocer y aplicar los algoritmos de ordenamiento y búsqueda
en los procesos de almacenamiento de la información.
~ 53 ~
5.1 ALGORITMOS DE ORDENAMIENTOS:
45 9 12 5 25 32 7
0 1 2 3 4 5 6
Busca el número menor comparando cada número con todos; es decir cada
subíndice es comparado con los restantes: Cada inserción se va
disminuyendo.
1. Class burbuja {
Private int arreglo [ ];
Public burbuja (int a [ ])
{
Arreglo= A;
}
Public void ordena () {
Int i, j;
For (i=0; i<arreglo.length; i++) {
~ 54 ~
2. Hacer un algoritmo que lea las edades de n personas y las imprima en
descendente.
Class ordenar_edades {
Private int edad [ ];
Public ordenar (int v [ ]) {
Edad= new int [v]. length];
Edad=v;
}
Public void organizar ( ) {
Int t;
For (int i=0; i<edad.legth; i++) {
For (int j=i+1; j<edad.legth; j++) {
If (edad [i]>edad[j]) {
t= edad [i],
edad [i]= edad [j];
edad [j]=t;
}
}
}
}
Public int [ ] mostrar ( ) {
Return edad;
}
}
3. Para manejar o controlar el numero de películas de una video tienda. Deberán hacer un
programa que maneje las siguientes opciones. 1) Agregar películas, para agregar una
película se deberá leer el código de la película, el nombre de la película y las
existencias, los 2 primeros dígitos del código corresponden al tiempo de la película.
Los siguientes 4 el año y los 3 últimos un consecutivo. 2) Ordenar de menor a mayor;
Permite organizar las películas por código y por ultimo, mostrar las películas de un
genero en especial.
Class película {
Private doublé cod [ ];
Prívate string nom [ ];
Prívate int exis [ ];
Private int c=0;
Public película (int co [ ], string n [ ], int ex [ ]) {
~ 55 ~
This.cod= cod;
This.exis=ex;
}
c++;
}
int i, j;
String t1;
doublé t2;
int t3;
t2=cod [i];
cod[i]= cod[j];
cod[j]=t2;
}
}
}
}
Public string mostrar (int gen) {
Int genero, string s;
If (genero== gen)
s+=”\n + cod [i] + “”+nom [i] + “”+ vol [i];
~ 56 ~
}
Return s;
}
Consiste en lo siguiente:
Ejemplo de selección:
1-3-5-2-4
1-2-5-3-4
Intercambiamos con el 5:
1-2-3-5-4
Intercambiamos con el 5:
1-2-3-4-5
~ 57 ~
5.3.1 EJEMPLO DE ALGORITMO DE SELECCIÓN:
import javax.swing.*;
ordenamientosconinsercionmejorado() {}
}
return S;
}
~ 58 ~
arreglo[j]=t;
}
c++;
if (c>30) s=" ";else s+="\n";
for (int k=0;k<arreglo.length;k++) s+=arreglo[k]+" ";
}
s+="\n";
}
JOptionPane.showMessageDialog(null,"Ordenamiento:"+s+"\nNo.
Comparaciones: "+c);
}
}
JOptionPane.showMessageDialog(null,"Ordenamiento:"+s+"\nNo.
Comparaciones: "+c);
}
~ 59 ~
{
c++;
if (arreglo[j]>aux)
{
l++;
arreglo[j+1] = arreglo[j];
}
else break;
}
arreglo[i-l]=aux;
if (c>300) s=" ";else s+="\n";
for (int k=0;k<arreglo.length;k++) s+=arreglo[k]+" ";
}
JOptionPane.showMessageDialog(null,"Ordenamiento:"+s+"\nNo.
Comparaciones: "+c);
}
arr[i]=Long.parseLong(JOptionPane.showInputDialog("Elemento["+
i+"]..."));
}
cambiararreglo(arr);
}
arr[i]=Long.parseLong(JOptionPane.showInputDialog("Elemento["+
i+"]..."));
}
ordenamientosconinsercionmejorado o= new
ordenamientosconinsercionmejorado(n,arr);
for (int i=0; i<n;i++)
{
~ 60 ~
JOptionPane.showMessageDialog(null,"arreglo["+i+"]=
"+o.arreglo()[i]);
}
do{
op=Integer.parseInt(JOptionPane.showInputDialog("\nMETODO DE
ORDENAMIENTO\n1. BURBUJA\n2. SELECCION\n3. INSERCION\n9.
CAMBIAR VALORES\n10. SALIR"));
switch(op)
{
case 1: o.burbuja(); break;
case 2: o.seleccion(); break;
case 3: o.insercion();break;
case 9: o.leer(); break;
}
}while (op!=10);
JOptionPane.showMessageDialog(null,"Arreglo Ordenado:"+o.verarreglo());
}
}
Se considera la lista partida en dos sublistas, una ordenada y la otra para ordenar
En el primer paso, la lista ordenada contiene un elemento y la lista por ordenar,
TAM-1,
Se van extrayendo uno a uno los elementos de la lista desordenada y se colocan en
la sublista ordenada, mediante comparaciones sucesivas, hasta encontrar la
posición correcta,
El proceso continúa hasta que la lista desordenada queda vacía.
Ejemplo de inserción:
8 12 4 9 3
8 12 4 9 3
4 8 12 9 3
4 8 9 12 3
3 4 8 9 12
~ 61 ~
5.5 OTROS METODOS DE ORDENAMIENTO:
El método flota:
*/
{ ...
Quick Sort:
- Inventado por C. A. R. Hoare
- Se escoge un elemento del arreglo como pivote
- Se particiona el arreglo en dos subarreglos: uno contiene
aquellos elementos menores que el pivote, el otro contiene
los mayores
- Se ordenan los subarreglos.
- Se obtiene el arreglo ordenado uniendo de nuevo los
subconjuntos ordenados y el pivote.
~ 62 ~
5.6. COMPARACION DE ALGORITMOS:
~ 63 ~
VI
ARBOLES
Objetivos de aprendizaje
Conocer y entender el concepto de árbol como una
estructura para almacenamiento de la información.
Implementar un árbol en Java.
~ 64 ~
6.1 CONCEPTO DE ABOLES:
Un árbol es una colección de elementos entre los cuales existe una estructura jerárquica
definida mediante una relación de paternidad entre los elementos.
~ 65 ~
6.2 CONCEPTO ARBOLES BINARIOS:
Conjunto finito de nodos que consta que un nodo raíz que tiene 2
subárboles binario denominado “subárbol izquierdo y árbol derecho”.
1. (a+b*c) / (d-e/f):
~ 66 ~
2. A+b*c-d+f/g:
3 a+b-c*+f-g:
+ +
A - d -
B C f g
4. a +b+c-d/f+--g
* +
+ - f g
a b c d
~ 67 ~
6.3 COMO SE REPRESENTA UN ÁRBOL BINARIO:
// Métodos
}
I D
+ -
a - d /
b c a c
Pre orden: * + a- bc-d/ac.
In Orden: a+b –c*d-a/a.
Pos orden abc-+dac/-*.
~ 68 ~
x*y+(d-c/a)/b%e:
+ %
* / b e
X y - a
C a
Pre orden: /+*xy/-dca%be.
In orden x*y+d-c/a/b%e.
Pos orden xy*dc-a+be%.
El recorrido pre orden produce una noticia prefija el in orden una notación
convencional y el pos orden una notación post fija o inversa.
1. Para todo nodo A[i] todas las claves del subárbol izquierdo son menores de
las claves de A[i].
2. Todas las claves de subárbol derecho de A[i] son mayores que todas las
claves de A[i].
Resulta fácil i el nodo que se quiere borrar es un nodo terminal (hoja) o un nodo
con un solo descendiente.
~ 69 ~
Si queremos borrar el 17, si tomáramos como sucesor la raíz de sub árbol
izquierdo 17, su sub árbol derecho 21 lo será ahora del nodo + ala derecha en el
sub árbol izquierdo.
Si tomáramos como sucesor la raíz de sub árbol derecho 21, su sub árbol
izquierdo 13 lo será ahora del nodo + ala izquierda en el sub árbol 21.
~ 70 ~
~ 71 ~
VII
GRAFOS
Objetivos de aprendizaje
~ 72 ~
7.1 CONCEPTO DE GRAFOS:
N = {A, B, C, D, E}
R= {(A, A), (A, B), (A, D), (A, C), (D, C), (C, E)}
Cada arco de un grafo establece una única relación entre dos nodos.
~ 73 ~
Cada arco se representa a través de un par, donde cada elemento
determina uno de los nodos.
En e= [u,v] u y v se denominan extremos de e de u y de v dicen
que son vecinos (verticales o adyacentes)
Grado de un nodo u: es un numero de arista que tiene nodo u
Si el grado de u es =0 el nodo no pertenece a ninguna lista recibe
el nombre de (nodo aislado).
Camino: secuencia de vértices tal que dos vértices consecutivos
sean adyacentes (unidos por un arco).
Grafos conexos:
V= {A, B, C, D, E}
~ 74 ~
Grafos con peso:
Grad_ent (0)= 1.
Grad_ sal (D)= 2.
Sumidero= c;
Fuente=0;
~ 75 ~
A partir de un grafo, siempre es posible definir un orden arbitrario de los nodos.
~ 76 ~
También se conoce como matriz de bits o matriz booleana. M=4 para:
V1 v2 v3 v4
A B C D
De: v1= A 0 0 0 1
v2= B 1 1 1 0
v3= C 0 0 0 0
v4= D 0 1 1 0
Grad.Entra 1 2 2 1.
Grad.sal 1 3 0 2.
Sea G un grado dirigido simple con m nodos identificados con v1, v2, v3, v4,
vm, la matriz de camino o matriz de alcance G. Es la matriz m². P= (Pij).
M4=
V1 v2 v3 v4
v1 0 0 0 1
A= v2 1 0 1 1
v3 1 0 0 1
v4 0 0 1 0
~ 77 ~
0010 1001
1012 1022
A²= 0 0 1 1 A³= 1 0 1 1
1001 0011
0011 1023
A4= 2 0 2 3 Bm= 5068
1012 3035
1011 2032
1011
P= 1 0 1 1
1011
1011
La matriz de caminos P nos dice si hay o no camino entre los nodos. Ahora se
quiere encontrar la matriz q= (qij) que nos indica, las longitudes de caminos
mínimos entre 2 nodos, para eso debemos hallar:
Imagen:
1100
A= 1 0 0 1
0100
1 0 10
7500
W= 7002
0300
4010
~ 78 ~
Para hallar Q0 se remplaza los ceros por infinito y luego se halla Qk para k de
1–4
7 5 oo oo
Q0= 7 oo oo 2
oo 3 oo oo
4 oo 1 oo
7 14
Q1 [1, 2]= min (Qo [1,2] Qo [1, 1] + Qo [1,2])=5
5 7 5
3 oo + 5
R 7 5 oo oo
Q1= S 7 12 oo 2
T oo 3 oo oo
U 4 9 1 oo
~ 79 ~
~ 80 ~