Está en la página 1de 3

UNIVERSIDAD DE ANTIOQUIA

FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA DE SISTEMAS

Cédula____ Nombre _____Juan José Higuita Sánchez_____

Observaciones generales: Su programa de computador lo puede hacer en JAVA, C++ o


PYTHON. Su respuesta la debe enviar por correo cuyo asunto debe ser:

TercerExamenLogicaIII[Nombre][lenguaje][IDE] donde en Nombre, va su nombre con


apellidos, en lenguaje va el lenguaje en el cual desarrolló su examen y en IDE, la plataforma en
la que trabajó: netbeans, intellij, jupiter, pycharm, etc.
OJO: el nombre del archivo enviado en su correo debe tener también su nombre.

El examen es de 12 del día a 2 de la tarde si es en pseudo código, o hasta las 8 de la noche si es


implementado. La demora en el envío implica sanción por mora.

1. Diseñe la forma de entrar un grafo a un computador. Con base en su diseño, elabore algoritmo que
construya la representación del grafo como lista ligada de adyacencia. El grafo que el usuario entre puede ser
dirigido o no dirigido. Luego, con base en la representación construida elabore programa que determine si el
grafo es conectado (si es no dirigido) o fuertemente conectado (si es dirigido). En caso de que no sea
conectado (si es no dirigido) o no sea fuertemente conectado (si es dirigido) deberá mostrar cuántas
componentes tiene y cuáles son los vértices que conforman cada una de las componentes. Recuerde que si el
grafo es dirigido el concepto de conectado es “fuertemente conectado”.

Otro OJO: preferiría pseudo código. Si lo hace en pseudo código, asuma que el grafo ya está
construido con la representación dada.
void esConectado(int v, boolean dirigido) // Se ingresa true si el grafo es dirigido y false si no es dirigido*9
// Se recorre el grafo para así tener el vector visitado el cual será útil luego
int  t
nodoSimple  y
boolean resultado
colas  cola
cola = new  colas()
visitado[v] = 1
cola.encolar(v)
while  (!cola.esVacia())  do
v = (Integer)cola.desencolar()
y = V[v]
while (y  !=  null)  do
t = (Integer)p.retornaDato()
if (visitado[t] == 0)  then
visitado[t] = 1
cola.encolar(t)     
end(if)
p = p.retornaLiga()
end(while)
end(while)

// Gracias al vector “visitado” y a que el usuario ingresa si el grafo es dirigido o no, se podrá saber si el
grafo es conectado, fuertemente conectado, no es conectado o no es fuertemente conectado

int x = 1
while(x <= visitado.tamaño()) do
if(visitado[v] = 0)
resultado = false
else
resultado = true
end(if)
end(while)
if(dirigido == true)
if(resultado == false)
write(“No es fuertemente conectado”)
else
write(“Es fuertemente conectado”)
return
end(if)
else
if(resultado == false)
write(“No es conectado”)
else
write(“Es conectado”)
return
end(if)
end(if)

// Modificación del kruskal para imprimir cuantas componentes tiene y los vértices que componen las
componentes del grafo
lado  l
int  i, j, k, v, w
nodoSimple  p
eneConjuntos  nv = new  eneConjuntos(n)
conjunto  st = new  conjunto()
nv.inicializa()
k=0
p = lados.primerNodo()
int numeroComponentes = n
while  (k < n – 1)  do
l = (lado)p.retornaDato()
v = l.retornaVi()
w = l.retornaVj()
i = nv.alConjunto(v)
j = nv.alConjunto(w)
if  (i != j   and   i != 0   and   j != 0)  then
st.agregar(l)
nv.uneConjuntos(i, j)
numeroComponentes = numeroComponentes - 1
nv.borraConjunto(j)
k=k+1
end(if)
p = p.retornaLiga()
end(while)
write(“El número de conjuntos es” + numeroComponentes)
write(nv) // Se toma como suposición que en el método write para nv, o sea la clase eneConjuntos el
método imprimir no imprime los conjuntos vacíos, así imprimiendo los vértices que componen cada
componente del grafo
Fin(esConectado)

También podría gustarte