Apéndice C Código Generador de Redes #i n c l u d e #i n c l u d e #i n c l u d e #i n c l u d e #i n c l u d e #i n c l u d e #i n c l u d e < io st r ea m > < f st r ea m > <string > <vector > < a lg o r it hm > <cstdlib > ” MersenneTwister . h” #d e f i n e MAX 1 0 0 0 #d e f i n e Obj 2 u s i n g namespace s t d ; / / Generador de n ’ umeros a l e a t o r i o s MTRand random ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− / / Generaci ’ on de pa r a met r o s para l a s d i s t r i b u c i o n e s v o i d pa r a met r o s ( cha r f u n c i o n ) { do uble num , a , b , m, n , k ; switch ( funcion ) { c a s e ’ a ’ : c a s e ’A ’ : num=random . randExc ( ) ∗ 1 0 ; co ut << ” ”<< num ; break ; case ’ b ’ : case ’B’ : num=i n t ( random . randExc ( ) ∗ 1 0 + 1 ) ; co ut << ” ”<< num ; num=random . randExc ( ) ∗ 1 0 ; co ut << ” ”<< num ; break ; case ’ c ’ : case ’C’ : break ; c a s e ’ d ’ : c a s e ’D ’ : num=random . randExc ( ) ∗ 5 ; co ut << ” ”<< num ; num=random . randExc ( ) ∗ 2 ; 77 APÉNDICE C. CÓDIGO GENERADOR DE REDES co ut << ” ”<< num ; break ; case ’ e ’ : case ’E ’ : break ; case ’ f ’ : case ’F ’ : a =random . randExc ( ) ∗ 5 ; co ut << ” ”<< a ; b=random . randExc ( ) ∗ 1 0 ; w h i l e ( b<=a ) b=random . randExc ( ) ∗ 1 0 ; co ut << ” ”<< b ; break ; c a s e ’ g ’ : c a s e ’G’ : num=i n t ( random . randExc ( ) ∗ 1 0 + 1 ) ; co ut << ” ”<< num ; break ; c a s e ’ h ’ : c a s e ’H ’ : num=random . randExc ( ) ∗ 1 0 ; co ut << ” ”<< num ; break ; case ’ i ’ : case ’ I ’ : m=i n t ( random . randExc ( ) ∗ 1 0 0 + 1 ) ; co ut << ” ”<< m ; num= random . randExc ( ) ; k=i n t (num∗m) ; co ut << ” ”<< k ; num= random . randExc ( ) ; n=i n t (num∗k )+1; co ut << ” ”<< n ; break ; case ’ j ’ : case ’ J ’ : num= random . randExc ( ) ; co ut << ” ”<< num ; break ; c a s e ’ k ’ : c a s e ’K’ : m=i n t ( random . randExc ( ) ∗ 1 0 0 + 1 ) ; co ut << ” ”<< m ; num= random . randExc ( ) ; co ut << ” ”<< num ; break ; case ’ l ’ : case ’L ’ : num= i n t ( random . randExc ( ) ∗ 1 0 0 + 1 ) ; 78 APÉNDICE C. CÓDIGO GENERADOR DE REDES 79 co ut << ” ”<< num ; break ; c a s e ’m’ : c a s e ’M’ : num= random . randExc ( ) ; co ut << ” ”<< num ; break ; c a s e ’ n ’ : c a s e ’N ’ : num=i n t ( random . randExc ( ) ∗ 5 0 + 1 ) ; co ut << ” ”<< num ; num= random . randExc ( ) ; co ut << ” ”<< num ; break ; case ’\ n ’ : case ’ ’ : break ; default : co ut << ” Entrada i n c o r r e c t a ” ; break ; } } / / Ma t r iz de a d y a c e n c i a i n t m a t r i z [MAX] [MAX] ; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− / / C’ o d i g o P r i n c i p a l d e l Programa i n t main ( i n t argc , cha r ∗ a r g s [ ] ) { i n t i , j , a r c o s , k , co nt ; i n t Nodos ; i f ( argc <=1) { co ut << ”Forma de uso : ” < < e n d l ; co ut < < ” r e d e s 3 #nodos ” << e n d l ; return 0 ; } / / N’ umero de nodos para l a r ed Nodos = a t o i ( a r g s [ 1 ] ) ; do uble num , p ; cha r f u n c i o n ; a r c o s =0; num=0; APÉNDICE C. CÓDIGO GENERADOR DE REDES / / Limpiar m a t r i z de a d y a c e n c i a f o r ( i =0; i <Nodos ; i ++) { f o r ( j =0; j <Nodos ; j ++) { matriz [ i ] [ j ]=0; } } f o r ( i =0; i <Nodos ; i ++) { m a t r i z [ i ] [ i +1]=1; } / / C o n s t r u c c i ’ on a l e a t o r i a de l a m a t r i z de a d y a c e n c i a f o r ( i =0; i <Nodos −1 ; i ++) { co nt = 0 ; p = 0.7; f o r ( j=i +2; j <Nodos ; j ++) { num=random . randExc ( ) ; i f (num<p ) { matriz [ i ] [ j ]=1; co nt ++; } else { matriz [ i ] [ j ]=0; } p = p ∗ 0.7; } i f ( co nt ==0) { co nt=i n t ( ( Nodos−i −1)∗random . randExc ()+ i +1); m a t r i z [ i ] [ co nt ] = 1 ; } } / / Cuenta n ’ umero de a r c o s en l a m a t r i z f o r ( i =0; i <Nodos ; i ++) { f o r ( j=i ; j <Nodos ; j ++) { i f ( m a t r i z [ i ] [ j ]==1) { a r c o s=a r c o s +1; } } } 80 APÉNDICE C. CÓDIGO GENERADOR DE REDES / / Imprime r ed con c o s t o s co ut << ”nombre . t x t ” << e n d l ; co ut << Nodos << ” ”<< a r c o s << e n d l ; f o r ( i =0; i <Nodos ; i ++) { f o r ( j=i ; j <Nodos ; j ++) { i f ( m a t r i z [ i ] [ j ]==1) { co ut << i +1 << ” ” << j +1; f o r ( k=0;k<Obj ; k++) { / / e l i g e un c o s t o f i j o num=i n t ( random . randExc ( ) ∗ 1 0 + 1 ) ; co ut << ” ”<< num ; / / e l i g e una f u n c i ’ on y s u s par ’ ametros funcion = ( cha r ) ( ( i n t ( random . randExc ( ) ∗ 1 4 ) ) + ’A ’ ) ; co ut << ” ”<< f u n c i o n ; pa r a met r o s ( f u n c i o n ) ; } co ut << e n d l ; } } } return 0 ; } 81