Képbejárás C++ -ban

Címkék
Képbejárás C++ -ban
2012-02-07T01:11:52+01:00
2012-02-07T19:19:52+01:00
2022-11-24T15:05:34+01:00
szivar1
Üdv!

Van egy problémám... Rekurzívan akarok meghívni egy fgv-t ami bejár egy 3D-s bináris képet de valami miatt nem működik :(


int vazbejaras(int ***vazpontok,int *** szomszedpontok,int i,int j,int k) { int szamlalo=0; for(int a=-1;a<=1;a++){ for(int b=-1;b<=1;b++){ for(int c=-1;c<=1;c++){ if((vazpontok[i+a][j+b][k+c]==1 && a!=b!=c!=0)){ if(regiiranya!=a){szamlalo++;} if(regiiranyb!=b){szamlalo++;} if(regiiranyc!=c){szamlalo++;} if(szamlalo!=0){ regiiranya=a*-1; regiiranyb=b*-1; regiiranyc=c*-1; while(szomszedpontok[i+a][j+b][k+c]<3){ vazbejaras(vazpontok,szomszedpontok,i+a,j+b,k+c); } szamlalo=0; } } } } } return 0; }

m.j.: a vázpontok tömbben vannak a kép (1 kockányi vastag váz) pontjai, a szomszédok tömbben az adott koordinátájú pont szomszédainak a száma és addig szeretnék menni a fgv-vel amíg elágazásig nem érek... Az elején jól működik, követi is szépen a vázat, csakhogy megakad amikor egy U alaki "görbe" aljára ér (amikor újra el kellene kezdenie emelkedni)

Nem tudjátok mi lehet a baj?
Mutasd a teljes hozzászólást!
Tehát a,b,c ne legyen mind 0, azaz legyen köztük nem 0.
Erre jó a már említett ((a!=0)||(b!=0)||(c!=0)) képlet.

Pár soros kis programmal is ellenőrizhető, amit most mellékelek.
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Az a=b=c=... értékadásra emlékeztető a!=b!=c!=0 feltétel talán arra kellene, hogy a,b,c egyike sem 0,
    vagy arra, hogy van közöttük nem 0.

    A képlet kiértékeléséből: ((a!=b)!=c)!=0 látszik, hogy egészen más jön ki.
    Pl.
    a b c ( 1 != -1 != 1 != 0) --> (1 != 1 != 0) --> (0 != 0) --> 0 ( 1 != -1 != 0 != 0) --> (1 != 0 != 0) --> (1 != 0) --> 1 ( 0 != 0 != 0 != 0) --> (0 != 0 != 0) --> (0 != 0) --> 0 (-1 != 1 != 1 != 0) --> (1 != 1 != 0) --> (0 != 0) --> 0


    Csak egy kicsit hosszabb képlet kellene: (a!=0)&&(b!=0)&&(c!=0),
    vagy a másik esetre: (a!=0)||(b!=0)||(c!=0).
    Mutasd a teljes hozzászólást!
  • Az arra kell, hogy a bejáráskor ne egy helyben topogjon végig, hanem menjen tovább... (az a-b-c mutatja meg az elmozdulás irányát és ha mind 0 akkor nem lép tovább)
    De mondasz valamit, leellenőrzöm!
    Kösz a tippet!
    Mutasd a teljes hozzászólást!
  • Tehát a,b,c ne legyen mind 0, azaz legyen köztük nem 0.
    Erre jó a már említett ((a!=0)||(b!=0)||(c!=0)) képlet.

    Pár soros kis programmal is ellenőrizhető, amit most mellékelek.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd