Zdravim, mam relativne jednoduchy problem a nedari sa mi z neho vymotat. Ide o ulohu obchodneho cestujuceho, alebo inak najkratsia okruzna cesta v grafe. Problem nastava v sekcii /*PREHLADAVACI MECHANIZMUS */, kde sa program nevie dostat cez najvnutornejsi cyklus while, pricom to skompiluje a chybu nehlasi. popisem hlavne premenne p_i[] - pole indexov navstivenych riadkov, p_h[] - pole hodnot,resp. vyhovujucich prvkov , tz najmensich vo svojom riadku. - mechanizmus ma pracovat nasledovne > najprv stoji na pozicii i=0,j=0 - tz na zaciatku prveho riadku, dalej ma prehladat cely riadok a najst min prvok s indexom j a v dalsom cykle skocit na riadok i = j , hlavna diagonala je zatial 500kova (zamerne vysoka hodnota)..v zavere ma tlacit pole min prvkov kazdeho riadku, pricom ma stale ignorovat hlavnu diag. a prvky s indexom ktory uz bol navstiveny v prechadzajucich cykloch.cize klasicky postup. Ma niekto nejaky napad <? dakujem
Kód:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double min, *p_h;
int n, i, j, x, d, q, *p_i;
cout<<"zadaj pocet vrcholov \n";
cin>>n;
//--------------------------------------------------------------------------
/* dynamicka alokacia matice */
double **IM;
IM=new double*[n];
for(i = 0 ; i < n ; ++i)
IM[i]=new double[n];
//--------------------------------------------------------------------------
/*dynamicka alokacia pomocneho pola*/
p_h=new double[n];
p_i=new int[n];
//--------------------------------------------------------------------------
/* inicializacia */
for( j = 0; j < n; j++)
{ cout<<"napln "<<j+1<<". riadok \n";
for( i = 0; i < n; i++)
{
if(i==j)
//dif.(HD)
IM[i][j]=500.0;
else if(j < i)
cin>>IM[i][j];
else if(i < j)
IM[i][j] = IM[j][i]; //symetricka inicial. matice okrem HD
}
cout<<" ";
}
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
/* tlac dynamickej matice */
for( j = 0 ; j < n ; j++)
{
cout<<'\n';
for( i = 0 ; i < n ; i++)
cout<<" "<<IM[i][j];
}
//--------------------------------------------------------------------------
/*PREHLADAVACI MECHANIZMUS*/
i = x = 0;
for(int c = 0 ; c < n ; c++)
{
p_i[c] = i = x;
min = IM[i][0];
for(j=0 ; j < n ; j++)
{
if(IM[i][j] < min)
{
int f = 0;
while(f < c+1) // chyba by mala byt niekde tu
{
if(j != p_i[f])
min = IM[i][j];
else
continue;
}
d = j;
}
}
x = d;
p_h[c] = min;
}
//--------------------------------------------------------------------------
/* tlac pole p_h[], p_i[] */
for( i = 0 ; i < n ; i++)
{
cout<<'\n'<<p_h[i]<<" ";
}
for( i = 0 ; i < n ; i++)
{
cout<<'\n'<<p_i[i]<<" ";
}
//--------------------------------------------------------------------------
/* uvolnenie pamate */
for( i = 0 ; i < n ; i++)
delete[]IM[i];
delete[]IM; //pre maticu
delete p_h; //pre pole
delete p_i;
cin.get();
cin.get();
return 0;
}
// pridané po 19 hodinách 48 minútach od posledného príspevku..a zabudol som spomenut dyn 2d pole IM[][], alebo incidencnu maticu, kt. je vlastne prehladavna. ak som popisal problem nedostatocne prosim napiste a skusim objasnit. bolo by super ak by niekoho napadlo riesenie. skusal som viac variant a asi mi nieco unikalo, lebo stale sa vynoril nejaky hacik. dakujem