Conj<Lista<Compu> > Red::CaminosMin(const Compu& c1,const Compu& c2) { assert( Esta( Computadoras(), c1 ) ); assert( Esta( Computadoras(), c2 ) ); assert( HayCamino(c1, c2) ); return *(this->caminosMasCortos.obtener(c1.Ip()))->obtener(c2.Ip()); }
void Red::Conectar(const Compu& c1,const Compu& c2,Nat& i1, Nat& i2) { assert( this->vecinos.definido(c1.Ip()) && this->vecinos.definido(c2.Ip()) ); assert( Esta( Computadoras(), c1 ) ); assert( Esta( Computadoras(), c2 ) ); assert( c1.Interfaces().Pertenece(i1) ); assert( c2.Interfaces().Pertenece(i2) ); assert( !UsaInterfaz(c1, i1) ); assert( !UsaInterfaz(c2, i2) ); this->vecinos.obtener(c1.Ip())->AgregarRapido(c2); this->vecinos.obtener(c2.Ip())->AgregarRapido(c1); this->usaInterfaz.obtener(c1.Ip())->operator [](i1) = true; this->usaInterfaz.obtener(c2.Ip())->operator [](i2) = true; this->interfaz.obtener(c1.Ip())->definir(c2.Ip(),i1); this->interfaz.obtener(c2.Ip())->definir(c1.Ip(),i2); ActualizarCaminos(c1, c2); //Actualiza todos los caminos posibles sobre todas las computadoras en el diccionario de caminos màs cortos Lista<Compu>::const_Iterador it1 = this->computadoras.CrearIt(); Lista<Compu>::const_Iterador it2 = this->computadoras.CrearIt(); while(it1.HaySiguiente()) { while(it2.HaySiguiente()) { ActualizarCaminosMasCortos(it1.Siguiente(), it2.Siguiente()); it2.Avanzar(); } it2 = this->computadoras.CrearIt(); it1.Avanzar(); } }
Conj<Lista<Compu> > Red::CaminosMinimos(Compu c1, Compu c2){ Nat k = 1; Nat n = Computadoras().Cardinal(); Conj<Lista<Compu> > x = CaminosDeLargoN(c1, c2, k); while(k<n && x.EsVacio()){ k++; x = CaminosDeLargoN(c1,c2, k); } return x; }
bool Red::HayCamino(const Compu& c1,const Compu& c2) { assert( Esta( Computadoras(), c1 ) ); assert( Esta( Computadoras(), c2 ) ); return ! this->caminosMasCortos.obtener(c1.Ip())->obtener(c2.Ip())->EsVacio(); }
bool Red::UsaInterfaz(const Compu& c1,Nat i) { assert( Esta( Computadoras(), c1 ) ); assert( c1.Interfaces().Pertenece(i) ); return this->usaInterfaz.obtener(c1.Ip())->operator [](i); }
Conj<Compu> Red::Vecinos(const Compu& c1) { assert( Esta( Computadoras(), c1 ) ); return *this->vecinos.obtener(c1.Ip()); }
bool Red::Conectadas(const Compu& c1,const Compu& c2) { assert( Esta( Computadoras(), c1 ) ); assert( Esta( Computadoras(), c2 ) ); return this->vecinos.obtener(c1.Ip())->Pertenece(c2); }