Clasa a IX- a Problema 1 drum Autor: tefan Negru Descrierea soluiei (tefan Negru) Soluie 100 puncte O(N*M) Iniial, matricea din enun va conine numai valori de 0. Pe msur ce citim poziiile pe care se afl densitile, completm matricea astfel: n primul rnd, decodificm poziia pentru a obine linia x i coloana y pe care trebuie asezat densitatea. n loc s punem n matrice valoarea citit, vom plasa una din valorile {1,2,3} cu semnificaia: Mat[x][y]=1 exist drum de la locaia [x][y] la linia 1 Mat[x][y]=2 exist drum de la locaia [x][y] la linia N Mat[x][y]=3 nu am descoperit nc dac exist drum de la locaia [x][y] la linia 1sau la linia N Dac x=1 atunci Mat[x][y]=1 Dac x=N atunci Mat[x][y]=2 Dac nu suntem in primele 2 cazuri atunci Mat[x][y]=3 Dac n urma acestor adaugri n matrice se creeaz una dintre situaiile: Mat[x][y]=1 i unul din vecini are valoarea 2 sau Mat[x][y]=2 i unul din vecini are valoarea 1 sau Mat[x][y] are att un vecin 1 ct i un vecin 2, nsemn c am aflat rspunsul. Oricare dintre aceste 3 situaii reprezint faptul c din locaia [x][y] exist drum att la linia 1 ct i la linia N, deci am gsit un drum de la la linia 1 la linia N. Prin urmare, afim densitatea corespunzatoare liniei de pe care tocmai am citit (densitile sunt considerate in ordine cresctoare). Altfel, actualizm matricea astfel: Dac n matrice exist o valoare 3 vecin cu o valoare 1, punem in loc de 3, valoarea 1. Dac n matrice exist o valoare 3 vecin cu o valoare 2, punem in loc de 3, valoarea 2. Dac n locaia [x][y] am plasat valoarea 1 sau valoarea 2, nlocuim valorile 3 din vecintate cu marcajul Mat[x][y], continund cu vecinii vecinilor, ct timp acest lucru este posibil.