Cześć Piszę rozwiązanie problemu QAP metoda branch and bound
i otóż napisałem taką funkcję algorytmu:
bool BB(Qap a, int dystans=0, int rek=0)//0-nie spr 1-którsza 2- dluższa
{
cout << "wykonanie BB rek = " <<rek<<" ";
if(rek==6)
{
for(int i=0; i<a.n;i++)
{
a.permutacja[i]=a.filtracja[i];
cout << a.permutacja[i];
}
cout<<endl;
return true;
}
srand(time(0));
int exit=0;
for(int i=0; i<a.n;i++)
{
if(a.A1[a.permutacja[0]][i]==1 || a.A1[a.permutacja[0]][i]==2)
exit++;
}
if(exit==6) return true;
int szczesliwy_numerek =rand() % a.n; /* losowanie liczby z zakresu <0,n-1> */
if(a.permutacja[rek]!=szczesliwy_numerek)
{
if(a.A1[a.permutacja[rek]][szczesliwy_numerek]==1 || a.A1[a.permutacja[rek]][szczesliwy_numerek]==2)
return true;
dystans+=a.tablica[a.permutacja[rek]][szczesliwy_numerek];
if(a.droga < dystans)
{
a.A1[a.permutacja[rek]][szczesliwy_numerek]=1;
rek+=1;
a.filtracja[rek]=szczesliwy_numerek; //TUTAJ zapamietujemy droge
if(BB(a, rek+1,dystans)) return true;
}
}
}
która wykonuje się na klasie QAP
nie działa... jest to funkcja rekurencyjna i nie wiem dlaczego nie wykonuje się w głąb