Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <cstdlib>
- using namespace std;
- int licznik = 0;
- int *kolejka=(int*)malloc(sizeof(int*));
- void add_kolejka(int adresik)
- {
- *(kolejka+licznik)=adresik;
- licznik++;
- }
- int pop_kolejka()
- {
- int dlugosc = 0;
- int zwracana = *kolejka;
- while(dlugosc<licznik)
- {
- *(kolejka+dlugosc)=*(kolejka+dlugosc+1);
- dlugosc++;
- }
- *(kolejka+licznik)=-49823564;
- licznik--;
- return zwracana;
- }
- int oblicz_wiersz(int n, int pozycja)
- {
- return pozycja/n;
- }
- int oblicz_kolumna(int m, int pozycja)
- {
- return pozycja%m;
- }
- void droga_do_wyjscia(int **wsk, int **wsk_numery, int wiersz, int kolumna, int m)
- {
- if(kolumna!=0)
- if(*(*(wsk+wiersz)+kolumna-1) == -2)
- {
- *(*(wsk+wiersz)+kolumna-1) = *(*(wsk+wiersz)+kolumna)+1;
- add_kolejka(*(*(wsk_numery+wiersz)+kolumna-1));
- }
- if(kolumna<m)
- if(*(*(wsk+wiersz)+kolumna+1) == -2)
- {
- *(*(wsk+wiersz)+kolumna+1) = *(*(wsk+wiersz)+kolumna)+1;
- add_kolejka(*(*(wsk_numery+wiersz)+kolumna+1));
- }
- if(wiersz!=0)
- if(*(*(wsk+wiersz-1)+kolumna) == -2)
- {
- *(*(wsk+wiersz-1)+kolumna) = *(*(wsk+wiersz)+kolumna)+1;
- add_kolejka(*(*(wsk_numery+wiersz-1)+kolumna));
- }
- if(wiersz<m)
- if(*(*(wsk+wiersz+1)+kolumna) == -2)
- {
- *(*(wsk+wiersz+1)+kolumna) = *(*(wsk+wiersz)+kolumna)+1;
- add_kolejka(*(*(wsk_numery+wiersz+1)+kolumna));
- }
- }
- int main()
- {
- int m,n,sx,sy,wy,wx;
- cin >> n;
- cin >> m;
- cin >> sy;
- cin >> sx;
- cin >> wy;
- cin >> wx;
- int **wsk;
- wsk=(int**)malloc(n*sizeof(int*)); // tworzymy dynamicznie wiersze tablicy.
- for(int i=0; i<n; i++)
- { //tworzymy dynamicznie kolumny tablicy.
- *(wsk+i)=(int*)malloc(m*sizeof(int));
- }
- int lic=0;
- for(int x = 0; x < n; ++x)
- for (int i = 0;i < m;i++)
- {
- cin >> lic;
- if(lic == 0) *(*(wsk+i)+x) = -2;
- else *(*(wsk+i)+x) = lic;
- }
- int **wsk_numery;
- wsk_numery = (int**)malloc(n * sizeof(int*));
- for(int x = 0; x < n; ++x)
- {
- *(wsk_numery+x) = (int*)malloc(m * sizeof(int));
- }
- int k=0;
- for(int x = 0; x < n; ++x)
- for (int i = 0; i < m;i++)
- {
- *(*(wsk_numery+i)+x)=k;
- k++;
- }
- int pozycja;
- int wiersz,kolumna;
- *(*(wsk+sx)+sy)=0;
- add_kolejka(*(*(wsk_numery+sx)+sy));
- while(licznik)
- {
- pozycja = pop_kolejka();
- kolumna = oblicz_wiersz(m,pozycja);
- wiersz = oblicz_kolumna(m,pozycja);
- droga_do_wyjscia(wsk,wsk_numery,wiersz,kolumna,m);
- }
- int g,d,p,l;
- if(wx > 0)g=*(*(wsk+wx-1)+wy);
- else g = 9999999;
- d=*(*(wsk+wx+1)+wy);
- if( wy > 0) p=*(*(wsk+wx)+wy-1);
- else p = 9999999;
- l=*(*(wsk+wx)+wy+1);
- int min=100;
- if (g>0)
- {
- if (g<min) { min=g; }
- }
- if (d>0)
- {
- if (d<min) { min=d; }
- }
- if (p>0)
- {
- if (p<min) { min=p; }
- }
- if (l>0)
- {
- if (l<min) { min=l; }
- }
- if (min==100)
- {
- cout << "NIE WYJDZIESZ ;(";
- }
- else { cout << min+1; }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement