Titlul: weird
Scris de: Vlad Eugen Dornescu din Noiembrie 29, 2009, 10:32:37
in problema insule ( trebuie sa unesc 2 insule (una de elem 1 cu alta de elem 2) printr-un pod de lungime minima) incerc sa scriu lee-ul clasic pt toate elementele 1 iar apoi un lee pt toate elementele 2 (pasii doar pe "0"-apa) problema e, ca pt elementele 1 nu imi functioneaza lee-ul decat pentru prima margine pe care o gaseste? aici e codul pls help, ma chinui de 4 ore for(i=1;i<=n;i++) for(j=1;j<=m;j++) o[i][j]=n*n*n*n*n;
for(i=1;i<=n;i++) { for(j=1;j<=m;j++) if(a[i][j] == 1) { first=0; last=0; o[i][j]=1; qi1[last]=i; qj1[last]=j; last++; while (!isempty()){ i=qi1[first]; j=qj1[first]; first++; inou = i+1; jnou = j; if (a[inou][jnou] == 0) if (o[inou][jnou] > 1+ o[i][j]) { o[inou][jnou] = 1+ o[i][j]; qi1[last] = inou; qj1[last] = jnou; last++; } inou = i-1; jnou = j; if (a[inou][jnou] == 0) if (o[inou][jnou] > 1+ o[i][j]) { o[inou][jnou] = 1+ o[i][j]; qi1[last] = inou; qj1[last] = jnou; last++; } inou = i; jnou = j+1; if (a[inou][jnou] == 0) if (o[inou][jnou] > 1+ o[i][j]) { o[inou][jnou] = 1+ o[i][j]; qi1[last] = inou; qj1[last] = jnou; last++; } inou = i; jnou = j-1; if (a[inou][jnou] == 0) if (o[inou][jnou] > 1+ o[i][j]) { o[inou][jnou] = 1+ o[i][j]; qi1[last] = inou; qj1[last] = jnou; last++; } } } }
Titlul: Răspuns: weird
Scris de: Vlad Eugen Dornescu din Noiembrie 29, 2009, 11:07:51
asta e secventa mea de rezolvare a problemei ](*,) imi face doar pt primele 2 margini for(i=1;i<=n;i++) { for(j=1;j<=m;j++) if(a[i][j] == 1) { first=0; last=0; o2[i][j]=1; qi2[last]=i; qj2[last]=j; last++; while (!isempty()){ i=qi2[first]; j=qj2[first]; first++; inou = i+1; jnou = j; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } inou = i-1; jnou = j; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } inou = i; jnou = j+1; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } inou = i; jnou = j-1; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } if (a[inou][jnou] == 2) o[inou][jnou]=o2[i][j]; } for(k=1;i<=n;i++) for(l=1;j<=m;j++) o2[k][l]=n*n*n*n*n; }
}
Titlul: Răspuns: weird
Scris de: alexandru din Noiembrie 29, 2009, 11:35:51
Initializeaza o2[ i ][j]=-1. Fa o functie care sa iti verifice daca inou, jnou is valide plus tu ai uitat sa tratezi cazul cand a[inou][jnou] este egale cu 2
Titlul: Răspuns: weird
Scris de: Vlad Eugen Dornescu din Noiembrie 29, 2009, 11:38:57
am facut acum chestia cu a[inou][jnou] == 2 tot e ceva gresit , ma poti ajuta ? cand si de ce trebuie resetat o ? for(i=1;i<=n;i++) { for(j=1;j<=m;j++) if(a[i][j] == 1) { first=0; last=0; o2[i][j]=1; qi2[last]=i; qj2[last]=j; last++; while (!isempty()) { i=qi2[first]; j=qj2[first]; first++; inou = i+1; jnou = j; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } inou = i-1; jnou = j; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } inou = i; jnou = j+1; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } inou = i; jnou = j-1; if (a[inou][jnou] == 0) if (o2[inou][jnou] > 1+ o2[i][j]) { o2[inou][jnou] = 1+ o2[i][j]; qi2[last] = inou; qj2[last] = jnou; last++; } } }
}
Titlul: Răspuns: weird
Scris de: alexandru din Noiembrie 29, 2009, 17:36:46
1. Eu nu vad unde ai introdus cazul a[inou][jnou] == 2, oricum daca nu-ti ordonezi codul nimeni nu o sa inteleaga nimic => nimeni nu o sa te poata ajuta, indenteaza, scrie subprogramre ...etc 2. fiecare problema are thread-ul ei :wink:.
Titlul: Răspuns: weird
Scris de: Pripoae Teodor Anton din Noiembrie 29, 2009, 19:05:40
fiecare problema are thread-ul lui :wink:.
Grea e limba romana. [-X
Titlul: Răspuns: weird
Scris de: Vlad Eugen Dornescu din Noiembrie 30, 2009, 07:58:04
imi merge dar iau doar 82 de puncte (3 lungimi minime gresite).Nu tratez toate cazurile??
|