class Floyd_Alg
{
private:
int m_size;
int m_min;
int m_max;
int m_use;
int **floyd_Array,**temp_Array;
int min_T(int a1, int a2);
public:
Floyd_Alg(int size, int min, int max, int use);
void init_Array();
void init_Floyd();
void Report();
~Floyd_Alg();
};
int Floyd_Alg::min_T(int a1, int a2)
{
int result;
if(a1<=a2)
result=a1;
else
result=a2;
return result;
}
Floyd_Alg::Floyd_Alg(int size, int min, int max, int use)
{
int i;
m_size=size;
m_min=min;
m_max=max;
m_use=use;
floyd_Array=new int*[m_size];
temp_Array=new int*[m_size];
for(i=0;i<m_size;i++)
{
floyd_Array[i]=new int[m_size];
temp_Array[i]=new int[m_size];
}
}
void Floyd_Alg::init_Array()
{
int i,j,k1,k2;
for(i=0;i<m_size;i++)
{
for(j=0;j<m_size;j++)
{
temp_Array[i][j]=-1;
floyd_Array[i][j]=-1;
}
}
i=0;
do
{
do
{
k1=rand()%m_size;
k2=rand()%m_size;
}while(temp_Array[k1][k2]!=-1);
temp_Array[k1][k2]=0;
++i;
}while(i<m_use);
for(i=0;i<m_size;i++)
{
for(j=0;j<m_size;j++)
{
if(temp_Array[i][j]==0)
floyd_Array[i][j]=m_min+rand()%(m_max-m_min);
}
}
}
void Floyd_Alg::init_Floyd()
{
int i,j,k;
for(i=0;i<m_size;i++)
for(j=0;j<m_size;j++)
for(k=0;k<m_size;k++)
floyd_Array[j][k]=min_T(floyd_Array[j][k],floyd_Array[j][k]+floyd_Array[i][k]);
}
void Floyd_Alg::Report()
{
int i,j;
for(i=0;i<m_size;i++)
{
for(j=0;j<m_size;j++)
{
if(floyd_Array[i][j]==-1)
cout<<i<<"*---->>"<<j<<"[not possible]\n";
else if(i!=j)
cout<<i<<"*---->>"<<j<<"="<<floyd_Array[i][j]<<endl;
}
}
}
Floyd_Alg::~Floyd_Alg()
{
int i;
for(i=0;i<m_size;i++)
{
delete[] floyd_Array[i];
delete[] temp_Array[i];
}
delete [] floyd_Array;
delete [] temp_Array;
}
Brak komentarzy:
Prześlij komentarz