11.05.2013 Views

Evaluación de Algoritmos de Ruteamiento Multipunto en Redes de ...

Evaluación de Algoritmos de Ruteamiento Multipunto en Redes de ...

Evaluación de Algoritmos de Ruteamiento Multipunto en Redes de ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

eturn(0);<br />

//break;<br />

}<br />

////fin <strong>de</strong> esta exepcion<br />

//loop <strong>de</strong> mi<strong>en</strong>tras no se complete el arbol final (con todos los miembros)<br />

while(AllDestinInTree == False) {<br />

//loop <strong>de</strong> todos los miembros <strong>de</strong>l arbol parcial <strong>en</strong> busca <strong>de</strong>l mejor adyac<strong>en</strong>te<br />

do {<br />

Adjac<strong>en</strong>cyListEntry *adj = Entra0->no<strong>de</strong>Ptr()->adjac<strong>en</strong>tNo<strong>de</strong>s(); //la ultima<br />

<strong>en</strong>trada <strong>en</strong> el arbol<br />

//loop <strong>de</strong> todos los adyac<strong>en</strong>tes a cada miembro <strong>de</strong>l arbol parcial<br />

while (adj != NULL) {<br />

int fu<strong>en</strong>teDKS = adj->no<strong>de</strong>Ptr()->name(); //para DIJKSTRA<br />

//un adyac<strong>en</strong>te al arbol parcial<br />

if ( pAgreg[adj->no<strong>de</strong>Ptr()->name()] == 1) {<br />

//si el adyac<strong>en</strong>te ya está <strong>en</strong> el arbol<br />

adj=adj->next();<br />

}<br />

else if ( pAgreg[adj->no<strong>de</strong>Ptr()->name()] == 0 ) {<br />

//si el adyac<strong>en</strong>te no está <strong>en</strong> el arbol<br />

// se evalua su contribucion<br />

///////////////////////////////////////DIJKSTRA--A--ADJ //////////////////////////////<br />

//Inicializo la matriz con la informacion <strong>de</strong> los costos<br />

//<strong>de</strong> los <strong>en</strong>laces <strong>de</strong> cada nodo y los indicadores <strong>de</strong> visitado y <strong>de</strong>stino<br />

//+ dos matrices para el calculo <strong>de</strong>l arbol dijktra<br />

for (i = 0; i < num; i ++) {<br />

for (j = 0; j < num; j ++)<br />

*(CostMatrixBC + i * num + j) = DBL_MAX;<br />

flagDestin2[i] = 0;<br />

pVisitedBC[i] = 0; //UNVISITED;<br />

CostLCMatrix[i] = DBL_MAX;<br />

<strong>de</strong>s<strong>de</strong>[i] = INT_MAX;<br />

};<br />

//Fin inicio matriz costos <strong>en</strong>laces<br />

//Marco con 1 a los nodos que son <strong>de</strong>stinos<br />

No<strong>de</strong>ListEntry *tmpp2;<br />

tmpp2 = group->headm();<br />

while(tmpp2 != NULL) {<br />

flagDestin2[tmpp2->no<strong>de</strong>Ptr()->name()] = 1;<br />

//printf("Miembro <strong>en</strong> DIJKSTRA : %d \n", tmpp2->no<strong>de</strong>Ptr()->name());<br />

tmpp2 = tmpp2->next();<br />

};<br />

//Fin marcado <strong>de</strong>stinos<br />

//Para obt<strong>en</strong>er el costo promedio por <strong>en</strong>lace<br />

//e inicializar la matriz <strong>de</strong> costos <strong>de</strong>s<strong>de</strong> cada nodo a sus adjac<strong>en</strong>tes<br />

int nLinkCount = 0;<br />

double avgLkCost = 0.0;<br />

double factor = 0.0;<br />

No<strong>de</strong>ListEntry *tmpp = no<strong>de</strong>ListHd; //la cabeza <strong>de</strong> la lista <strong>de</strong> nodos (<strong>de</strong> la red)<br />

while (tmpp != NULL) {<br />

i = tmpp->no<strong>de</strong>Ptr()->name();<br />

Adjac<strong>en</strong>cyListEntry *adjac = tmpp->no<strong>de</strong>Ptr()->adjac<strong>en</strong>tNo<strong>de</strong>s();<br />

while (adjac != NULL) {<br />

j = adjac->no<strong>de</strong>Ptr()->name();<br />

switch (heuristica) {<br />

case ANCHOBANDA:<br />

if (fn == PEAK) {<br />

*(CostMatrixBC + (i * num) + j) = adjac->peak();<br />

106

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!