en otra ventana

Anuncio
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
Descargar