Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA DE SISTEMAS
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)