Está en la página 1de 0

Programacin IV.

Gua 10
Tema: Grafos en C#.
Definir el concepto de Grafo.
A partir de una clase agregar la sintaxis necesaria para construir una funcin de grafos en C#
Gua Nmero 10.
Computadora con programa Microsoft isual C#.
Grafos.
!n grafo G"#$ %& est' formado por un con(unto de elementos llamados )*rtices +, - un
con(unto de aristas +%, .ue conectan a los distintos )*rtices. %n ocasiones los )*rtices son
llamados nodos - las aristas arcos.
/as aristas se definen como el par de )*rtices .ue conectan - pueden tener asociado un )alor
el cual representa el peso o dificultad para despla0arse de un )*rtice a otro.
%(emplo gr'fico de un grafo1
Donde1
*rtices " 2A$ 3$ C$ D$ %4
Aristas " 2#A$ 3&$ #A$ D&$ #3$ C&$ #3$ D&$ #3$ %&$ #C$ %&$ #D$ %&$ #%$ D&4
1
Facultad: Ingeniera
Escuela: Computacin
Asignatura: Programacin IV
!"eti#os Especficos
$ateriales % E&uipo
Introduccin Terica
Programacin IV. Gua 10
Tipos de grafos.
%xisten dos tipos de grafos1 los no dirigidos - los dirigidos.
Grafos No dirigidos.
5on a.uellos en los cuales las aristas no est'n orientadas #No son flec6as&. Cada lado se
representa entre par*ntesis$ separando sus )*rtices por comas$ - teniendo en cuenta .ue
am7os )*rtices son origen - destino a la )e01 #i$ (& " #($ i&.
Grafos Dirigidos.
5on a.uellos en los cuales las aristas est'n orientadas #flec6as&. Cada arista se representa
entre par*ntesis$ separando sus )*rtices por comas - teniendo en cuenta #i$ (& 8 #($ i&.
/os grafos pueden representarse de )arias formas en una computadora1
Listas adyacentes.
Cada )*rtice tiene una lista de )*rtices los cuales son ad-acentes a *l.
9epresentacin del e(emplo1
#A& ": 3 ": D
#3& ": C ": D ": %
#C& ": %
#D& ": %
#%& ": D
Listas de pares ordenados (incidentes).
/as aristas se representan como un arreglo de pares ordenados.
Matriz de adyacencia.
%l grafo se representa por una matri0 de tama;o x$ donde son los )*rtices .ue unen a los
nodos$ la con(uncin de los dos )*rtices representa la arista.
9epresentacin del e(emplo1
2
Programacin IV. Gua 10
Ejemplo 1.
%n los cdigos siguientes$ se muestra la implementacin de un grafo a partir de listas
ad-acentes. <omar como 7ase el grafo del e(emplo de la seccin terica - crearlo usando la
implementacin.
Crear un pro-ecto llamado grafo - en el principal agregar el siguiente cdigo1
Program.cs
3
Procedimiento
using 5-stem=
using 5-stem.Collections.Generic=
using 5-stem.<ext=
namespace grafo
2 class >rogram
2 pu7lic static )oid Menu# &
2 Console.?rite/ine#@AAM%N!AA@&=
Console.?rite/ine#@1. Crear grafo@&=
Console.?rite/ine#@B. Agregar )ertice@&=
Console.?rite/ine#@C. Agregar arco@&=
Console.?rite/ine#@D. Mostrar )ertices@&=
Console.?rite/ine#@E. Mostrar grafo@&=
Console.?rite/ine#@0. 5alir@&=
Console.?rite/ine#@opcion1 @&=
4
static )oid Main# &
2 string Fpcion=
string flag=
CGrafo Grafo " neG CGrafo# &=
Certice er " neG Certice# &=
Certice er1 " neG Certice# &=
Certice erB " neG Certice# &=
do
2 Menu# &=
Programacin IV. Gua 10
Agregar las clases !ertice.cs" Lista.cs y grafo.csm$ desarrollados en los recuadros de la
manera siguiente1 clic derec6o so7re el pro-ecto Grafo en el 'r7ol %xplorador de 5oluciones$
clic en agregar - clic en clase.
Dar el nom7re especificado en el recuadro - clic en Agregar.
4
Fpcion " Console.9ead/ine# &=
sGitc6 #Fpcion&
2 case @1@1HHCrear Grafo
Console.?rite#@ Desea Crear un Nue)o Grafo 1#5&H#N& @&=
flag " Console.9ead/ine# &=
if #flag "" @5@&
2 Grafo " neG CGrafo# &=
Console.?rite/ine#@Grafo Creado...@&=
4
7reaI=
case @B@1HHAgregar ertice
Console.?rite#@Jngrese el Nom7re del )ertice1""":: @&=
er.nom7re " Console.9ead/ine# &=
Grafo.Agregarertice#er&=
7reaI=
case @C@1HHAgregar Arco
Console.?rite#@Jngrese ertice Frigen 1""":: @&=
er1.nom7re " Console.9ead/ine# &=
Console.?rite#@Jngrese ertice Destino 1 @&=
erB.nom7re " Console.9ead/ine# &=
Console.?rite#@Jngrese Distancia 1 @&=
int Dist " int.>arse#Console.9ead/ine# &&=
Grafo.AgregarArco#er1$ erB$ Dist&=
7reaI=
case @D@1HHMostrar )etices
Console.?rite/ine#@/os )ertices del grafo son 1111@&=
Grafo.Mostrarertices# &=
7reaI=
case @E@1HHMostrar grafo
Console.?rite/ine#@%l grafo es el siguiente@&=
Grafo.MostrarGrafo# &=
7reaI=
4 HHKin del sGitc6
4
G6ile #Fpcion L" @0@&=
4
4
4
Programacin IV. Gua 10
!ertice.cs
Lista.cs
5
using 5-stem=
using 5-stem.Collections.Generic=
using 5-stem.<ext=
namespace grafo
2 class Certice
2 pu7lic string nom7re=
pu7lic Certice# &
2
4
pu7lic Certice#string Nom7re&
2 nom7re " Nom7re=
4
pu7lic o)erride string <o5tring# &
2 return nom7re=
4
pu7lic o)erride int GetMas6Code# &
2 return 7ase.GetMas6Code# &=
4
pu7lic o)erride 7ool %.uals#o7(ect o7(&
2 if #o7( "" null&
return false=
else
return nom7re.%.uals#o7(.<o5tring# &&=
4
4
4
using 5-stem=
using 5-stem.Collections.Generic=
using 5-stem.<ext=
namespace grafo
2 class Clista
2 HHNNNNNNNNNNNNNNNNA<9J3!<F5NNNNNNNNNNNNNNNNNNNNNNNNN
pri)ate Certice a%lemento=
pri)ate C/ista a5u7/ista=
pri)ate int a>eso=
HHNNNNNNNNNNNNNNNNCFN5<9!C<F9%5NNNNNNNNNNNNNNNNNNNNN
Programacin IV. Gua 10 6
pu7lic C/ista# &
2 a%lemento " null=
a5u7/ista " null=
a>eso " 0=
4
pu7lic C/ista#C/ista p/ista&
2 if #p/ista L" null&
2 a%lemento " p/ista.a%lemento=
a5u7/ista " p/ista.a5u7/ista=
a>eso " p/ista.a>eso=
4
4
pu7lic C/ista#Certice p%lemento$ C/ista p5u7/ista$ int p>eso&
2 a%lemento " p%lemento=
a5u7/ista " p5u7/ista=
a>eso " p>eso=
4
HHNNNNNNNNNNNNNNN>9F>J%DAD%5NNNNNNNNNNNNNNNNNNNNNNNN
pu7lic Certice %lemento
2 get
2 return a%lemento=4
set
2 a%lemento " )alue= 4
4
pu7lic C/ista 5u7/ista
2 get
2 return a5u7/ista= 4
set
2 a5u7/ista " )alue= 4
4
pu7lic int >eso
2 get
2 return a>eso= 4
set
2 a>eso " )alue=4
4
HHNNNNNNNNNNNNNNNNNNNNNNNNM%<FDF5NNNNNNNNNNNNNNNNNNN
pu7lic 7ool %sacia# &
2 return a%lemento "" null=
4
Programacin IV. Gua 10 7
pu7lic )oid Agregar#Certice p%lemento$ int p>eso&
2 if #p%lemento L" null&
2 if #a%lemento "" null&
2 a%lemento " neG Certice#p%lemento.nom7re&=
a>eso " p>eso=
a5u7/ista " neG C/ista# &=
4
else
2 if #L%xiste%lemento#p%lemento&&
a5u7/ista.Agregar#p%lemento$ p>eso&=
4
4
4
pu7lic )oid %liminar#Certice p%lemento&
2 if #a%lemento L" null&
2 if #a%lemento.%.uals#p%lemento&&
2 a%lemento " a5u7/ista.a%lemento=
a5u7/ista " a5u7/ista.5u7/ista=
4
else
a5u7/ista.%liminar#p%lemento&=
4
4
pu7lic int Nro%lementos# &
2 if #a%lemento L" null&
return 1 O a5u7/ista.Nro%lementos# &=
else
return 0=
4
pu7lic o7(ect Jesimo%lemento#int posicion&
2 if ##posicion : 0& PP #posicion Q" Nro%lementos# &&&
if #posicion "" 1&
return a%lemento=
else
return a5u7/ista.Jesimo%lemento#posicion N 1&=
else
return null=
4
pu7lic o7(ect Jesimo%lemento>eso#int posicion&
2 if ##posicion : 0& PP #posicion Q" Nro%lementos# &&&
if #posicion "" 1&
return a>eso=
else
return a5u7/ista.Jesimo%lemento>eso#posicion N 1&=
else
return 0=
4
Programacin IV. Gua 10
Grafo.cs
8
pu7lic 7ool %xiste%lemento#Certice p%lemento&
2 if ##a%lemento L" null& PP #p%lemento L" null&&
2 return #a%lemento.%.uals#p%lemento& RR
#a5u7/ista.%xiste%lemento#p%lemento&&&=
4
else
return false=
4
pu7lic int >osicion%lemento#Certice p%lemento&
2 if ##a%lemento L" null& RR #%xiste%lemento#p%lemento&&&
if #a%lemento.%.uals#p%lemento&&
return 1=
else
return 1 O a5u7/ista.>osicion%lemento#p%lemento&=
else
return 0=
4
pu7lic )oid Mostrar1# &
2 if #a%lemento L" null&
2 Console.?rite#a%lemento.nom7re O @1@&=
a5u7/ista.Mostrar1# &=
4
4
pu7lic )oid Mostrar# &
2 if #a%lemento L" null&
2 Console.?rite/ine#a%lemento.nom7re O @ @ O a>eso&=
a5u7/ista.Mostrar# &=
4
4
4
4
using 5-stem=
using 5-stem.Collections.Generic=
using 5-stem.<ext=
namespace grafo
2 class CGrafo
2
HH""""""""""""""""""""""""""""""Atri7utos"""""""""""""""""""""""""
protected Certice aertice=
protected C/ista a/ista=
protected CGrafo a5iguiente=
Programacin IV. Gua 10 9
HH""""""""""""""""""""""""Constructores""""""""""""""""""""""""""""
pu7lic CGrafo# &
2 aertice " null=
a/ista " null=
a5iguiente " null=
4
pu7lic CGrafo#Certice pertice$ C/ista p/ista$ CGrafo p5iguiente&
2 aertice " pertice=
a/ista " p/ista=
a5iguiente " p5iguiente=
4
HH"""""""""""""""""""""""""">ropiedades""""""""""""""""""""""""""""
pu7lic Certice ertice
2 get
2 return aertice= 4
set
2 aertice " )alue= 4
4
pu7lic C/ista /ista
2 get
2 return a/ista= 4
set
2 a/ista " )alue=4
4
pu7lic CGrafo 5iguiente
2 get2 return a5iguiente= 4
set2 a5iguiente " )alue= 4
4
HH"""""""""""""""""""""Fperaciones 3ase"""""""""""""""""""""""""""""""""
pu7lic 7ool %staacio# &
2 return #aertice "" null&=
4
pu7lic int Numerodeertices# &
2 if #aertice "" null&
return 0=
else
return 1 O a5iguiente.Numerodeertices#&=
4
Programacin IV. Gua 10 10
pu7lic 7ool %xisteertice#Certice )ertice&
2 if ##aertice "" null& RR #)ertice "" null&&
return false=
else
if #aertice.nom7re.%.uals#)ertice.nom7re&&
return true=
else
return a5iguiente.%xisteertice#)ertice&=
4
pu7lic )oid Agregarertice#Certice )ertice&
2 if ##)erticeL"null&PP#L%xisteertice#)ertice&&&
2 if #aertice L" null&
2 if #)ertice.nom7re.Compare<o#aertice.nom7re& Q 0&
2 CGrafo aux " neG CGrafo#aertice$ a/ista$ a5iguiente&=
aertice " neG Certice#)ertice.nom7re&=
a5iguiente " aux=
4
else
2 HHAgregar
a5iguiente.Agregarertice#)ertice&=
4
4
else
2 aertice " neG Certice#)ertice.nom7re&=
a/ista " neG C/ista#&=
a5iguiente " neG CGrafo#&=
4
4
4
pu7lic )oid AgregarArco#Certice perticeFrigen$ Certice perticeDestino$ int
pDistancia&
2 HH >osicionarse en el elemento donde se agragara el arco
if #%xisteertice#perticeFrigen& PP %xisteertice#perticeDestino&&
agregarArco#perticeFrigen$ perticeDestino$ pDistancia&=
else
Console.?rite/ine#@%rror......No se agrego arco@&=
4
pri)ate )oid agregarArco#Certice perticeFrigen$ Certice perticeDestino$
intpDistancia&
2 HH >osicionarse en el elemento donde se agragara el arco
if #%xisteertice#perticeFrigen&&
2 if #aertice.%.uals#perticeFrigen&&
2 HHAgregar Arco
if ##La/ista.%xiste%lemento#perticeDestino&&&
a/ista.Agregar#perticeDestino$ pDistancia&=
4
Programacin IV. Gua 10
Jdentificar1
%l tipo de estructura utili0ada para el mane(o del grafo.
%l o7(eti)o de cada atri7uto de las clases.
>ara cada opcin del men$ el m*todo in)ocado - los su7secuentes m*todos para lle)ar
a ca7o la tarea.
Ejercicio 1.
>ara el e(emplo desarrollado$ agregar al men$ las siguientes opciones1
%liminar *rtice.
%liminar Arco.
11
An'lisis de resultados
else
if #a5iguiente L" null&
a5iguiente.agregarArco#perticeFrigen$ perticeDestino$
pDistancia&=
4
4
pu7lic )oid Mostrarertices# &
2 if #aertice L" null&
2 Console.?rite/ine#aertice.nom7re&=
a5iguiente.Mostrarertices#&=
4
4
pu7lic )oid MostrarGrafo# &
2 if #aertice L" null&
2 for #int i " 1= i Q" a/ista.Nro%lementos#&= iOO&
Console.?rite/ine#aertice.nom7re O @ "": @ O
a/ista.Jesimo%lemento#i& O @ Con peso::::#@ O
a/ista.Jesimo%lemento>eso#i& O @ & @&=
a5iguiente.MostrarGrafo# &=
4
4
4
4
Programacin IV. Gua 10
>ara la siguiente semana1
Desarrollar una implementacin para grafos$ con las mismas opciones de men )istas en la
presente gua #todas&$ usando la estructura matri0 de ad-acencia.
12
In#estigacin Complementaria
Programacin IV. Gua 10
EVALUACIN
% 1-4 5-7 8-10 Nota
CONOCIMIENTO (el )*
al +*,
Conocimiento
deficiente
de los
fundamentos
tericos
Conocimiento
% e-plicacin
incompleta de
los
fundamentos
tericos
Conocimiento
completo %
e-plicacin
clara de los
fundamentos
tericos
APLICACIN
DEL
CONOCIMIENTO
(el .*,
al /*,
ACTITUD (el 01,
al +*,
2o tiene
actitud
proacti#a.
Actitud
propositi#a %
con
propuestas no
aplica!les al
contenido de
la gua.
Tiene actitud
proacti#a %
sus propuestas
son concretas.
TTA3 0**,
13
Gua 0*: Grafos en C#.
Hoja de cotejo:
10
$'&uina 2o: Alumno:
(ocente: G3:
Fec4a:

También podría gustarte