#include<iostream>
#include<fstream>
#include<ctime>
#include<math.h>
#include<cstdlib>
using namespace std;
inline int expntl_start(double x);
typedef struct Edge
{
int node1,node2;
double bandwidth;
}EDGE;
int main()
{
int Node_Num,Edge_Num,Split,Start_Time=0,Duration,Topo;
double lamada=20.0,param=500.0,result;
double Nodes_CPU[20];
EDGE Edge_Detail[20];
string s1="topo\\req";
string s2,s3,s2_1,s2_2,s2_3,s2_4;
srand( (unsigned)time(NULL) );
for(int j=0;j<2500; ++j)
{
Node_Num = rand()%18+3;
Edge_Num = Node_Num;
Split = 1;
Start_Time += expntl_start(lamada);
Duration = expntl_start(param);
Topo = 0;
for(int i=0;i<Node_Num;++i)
{
do
{
result = (double)rand()/RAND_MAX *50.0;
}while(!(result > 0.0));
Nodes_CPU[i] = result;
Edge_Detail[i].node1 = i;
Edge_Detail[i].node2 = (i+1)%Node_Num;
do
{
result = (double)rand()/RAND_MAX *50.0;
}while(!(result > 0.0));
Edge_Detail[i].bandwidth = result;
}
int tmp=j;
if(tmp<10)
s2 = '0'+tmp;
else if(tmp<100)
{
s2_1= '0'+(tmp/10);
s2_2= '0'+(tmp%10);
s2 = s2_1 + s2_2;
}
else if(tmp<1000)
{
s2_1= '0'+tmp/100;
tmp=tmp%100;
s2_2= '0'+tmp/10;
s2_3= '0'+tmp%10;
s2 = s2_1 + s2_2 + s2_3;
}
else
{
s2_1= '0'+tmp/1000;
tmp=tmp%1000;
s2_2= '0'+tmp/100;
tmp=tmp%100;
s2_3= '0'+tmp/10;
s2_4= '0'+tmp%10;
s2 = s2_1 + s2_2 + s2_3 + s2_4;
}
s3 = s1+s2+".txt";
ofstream output(s3.c_str());
output<<Node_Num<<" "<<Edge_Num<<" "<<Split<<" "<<Start_Time<<" "<<Duration<<" "<<Topo<<endl;
for(int i=0;i<Node_Num;++i)
output<<Nodes_CPU[i]<<endl;
for(int i=0;i<Node_Num;++i)
output<<Edge_Detail[i].node1<<" "<<Edge_Detail[i].node2<<" "<<Edge_Detail[i].bandwidth<<endl;
output.close();
}
system("pause");
return 0;
}
inline int expntl_start(double x)
{ /*负指数分布随机数*/
double z,r;
do{
do{
z=((double)rand()/RAND_MAX);
}while((z == 0)||(z == 1));
r=(-x*log(z));
}while( r == 0);
return r;
}