[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 14.01.12
Prihlásený: 20.07.13
Príspevky: 46
Témy: 9 | 9
NapísalOffline : 11.06.2012 10:35 | c++ obchodny cestujuci

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


Online

Skúsený užívateľ
Skúsený užívateľ
c++ obchodny cestujuci

Registrovaný: 11.01.09
Prihlásený: 30.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 12.06.2012 9:35 | c++ obchodny cestujuci

Ano, chybu mas presne tam, kde mas komentar, pretoze f je stale 0 a c+1 je na zaciatku stale 1. Kedze v tele cyklu mas iba porovnavanie tychto hodnot, nikdy z cyklu nevyjdes. Takze pridaj tam niekde inkrementaciu premennej f, napriklad takto:
Kód:
while( f < c+1 )
{
    if ( j != p_i[f] )
    {
        min = IM[i][j];
        f++;
    }
    else
    {
        f++;
        continue;
}


Zbytok, teda funkcionalitu kodu, som uz nestihol prezriet, takze to uz si testni, ci to robi to co chces. Ked nie, tak sem napis, pozrieme sa na to.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 14.01.12
Prihlásený: 20.07.13
Príspevky: 46
Témy: 9 | 9
Napísal autor témyOffline : 12.06.2012 22:19 | c++ obchodny cestujuci

ano to je pravda, dobry postreh. v tejto uprave som to nechtiac vynechal. ale aj tak je nefunkcny. vyzera to na slepu iteraciu ale este skusim podumkat .. dikis


 [ Príspevkov: 3 ] 


c++ obchodny cestujuci



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Obchodny zastupca

v Ponuka práce

0

752

23.02.2010 13:55

mSYSTEMS

V tomto fóre nie sú ďalšie neprečítané témy.

obchodny-dom.sk

v Obchody, reklamácie a právo

5

609

03.11.2012 12:50

mety

V tomto fóre nie sú ďalšie neprečítané témy.

Obchodny-dom.sk

v Obchody, reklamácie a právo

1

569

09.12.2011 19:50

michalesku

V tomto fóre nie sú ďalšie neprečítané témy.

Obchodný zástupca pre SR

v Ponuka práce

1

1279

28.07.2009 11:25

seokings

V tomto fóre nie sú ďalšie neprečítané témy.

obchodný zástupca - ČR / SR

v Ponuka práce

0

1109

19.01.2009 14:53

seokings

V tomto fóre nie sú ďalšie neprečítané témy.

ASUS VW193D-B "cestujúci" obraz

v Monitory, televízory a projektory

0

338

05.09.2012 15:24

ttkvas

V tomto fóre nie sú ďalšie neprečítané témy.

Obchodny zastupca pre Web Apps, s.r.o.

v Ponuka práce

1

1018

09.08.2011 13:44

TommyHot

V tomto fóre nie sú ďalšie neprečítané témy.

Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

796

08.07.2014 20:40

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

K: PC Literaturu- C++/C#/java/python/ruby/RoR

v Kúpim

0

463

13.05.2014 18:16

expresado

V tomto fóre nie sú ďalšie neprečítané témy.

Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka práce

0

1398

10.05.2016 14:59

evolvsys

V tomto fóre nie sú ďalšie neprečítané témy.

rozdiel medzi Borland 3.1 C++ vs Net. C++

v Assembler, C, C++, Pascal, Java

4

620

20.07.2010 12:54

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Hladam hracov na C&C Generals Zero Hour

v Počítačové hry

10

1295

07.03.2007 19:22

Spirit

V tomto fóre nie sú ďalšie neprečítané témy.

Naučte se C++ za 21 dní + C++Builder 6

v Assembler, C, C++, Pascal, Java

18

2476

21.05.2010 21:08

Wpegb

V tomto fóre nie sú ďalšie neprečítané témy.

Čo mi treba na programovanie v C/C++

v Assembler, C, C++, Pascal, Java

17

1197

25.09.2011 18:14

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

aky je rozdiel medzi C++ a Visual C++ ?

v Assembler, C, C++, Pascal, Java

8

2009

19.02.2011 22:46

vendo2

V tomto fóre nie sú ďalšie neprečítané témy.

Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android)

v Vymením a darujem

0

483

01.04.2019 11:20

tomasteicher



© 2005 - 2024 PCforum, edited by JanoF