Próbuję napisać algorytm do generacji grafów z podanym maksymalnym stopniem wierzchołka oraz prawdopodobieństwem wylosowania krawędzi w tabeli 2-wymiarowej.
W praktyce jest to tabela 3-wymiarowa bo pierwszym wymiarem jest rep czyli liczba grafów.
Próbuję w ten sposób / ale gdy wydrukuję taki graf to w tabeli mam dane dziwnych wielkości i mimo, że to tablica boolowska to nie mam samych zer i jedynek.
//Generacja grafów G(n,f,p)
void gen(int n, int f, float p, int rep, bool ***tab) {
int k,i,j,x,x2,l;
l=0;
x=-1;
zerowanie(n,rep,tab);
for(k=0;k<rep;k++){
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
srand( (unsigned)time( NULL ) );
if((p*100)>rand()%100){
do{
x2=x;
x=i+1+rand()%(n-i-1);
if(x==x2) l++;
}
while(tab[k][i][x]!=0 || l<2*n);
if(stopien(n,k,i,x,f,tab)){
tab[k][i][x]=1;
tab[k][x][i]=1;
}
}
}
}
}
}
Funkcje pomocnicze:
int stopien(int n,int k, int i, int x, int f, bool ***tab){
int l1,l2;
l1=l2=0;
for(int j=0;j<n;j++){
if(tab[k][i][j]) l1++;
if(tab[k][x][j]) l2++;
}
if(l1>=f || l2>=f)
return 0;
else return 1;
}
void zerowanie(int n,int rep,bool ***tab){
for(int k=0;k<rep;k++)
for(int i=0;i<n;i++)
for(int j=0;i<n;i++)
tab[k][i][j]=0;
}
Zamysł był taki, żeby w komórkach pod przekątną zależnie od prawdopodobieństwa w losowych miejscu w kolumnie wstawić krawędź jeśli stopnie są mniejsze niż f.