Advertisement
Guest User

Untitled

a guest
Dec 28th, 2011
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. #include<iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int licznik = 0;
  5.  
  6. int *kolejka=(int*)malloc(sizeof(int*));
  7.  
  8. void add_kolejka(int adresik)
  9. {
  10. *(kolejka+licznik)=adresik;
  11. licznik++;
  12. }
  13.  
  14. int pop_kolejka()
  15. {
  16. int dlugosc = 0;
  17. int zwracana = *kolejka;
  18. while(dlugosc<licznik)
  19. {
  20. *(kolejka+dlugosc)=*(kolejka+dlugosc+1);
  21. dlugosc++;
  22. }
  23. *(kolejka+licznik)=-49823564;
  24. licznik--;
  25. return zwracana;
  26. }
  27.  
  28. int oblicz_wiersz(int n, int pozycja)
  29. {
  30. return pozycja/n;
  31. }
  32. int oblicz_kolumna(int m, int pozycja)
  33. {
  34. return pozycja%m;
  35. }
  36.  
  37.  
  38. void droga_do_wyjscia(int **wsk, int **wsk_numery, int wiersz, int kolumna, int m)
  39. {
  40. if(kolumna!=0)
  41. if(*(*(wsk+wiersz)+kolumna-1) == -2)
  42. {
  43. *(*(wsk+wiersz)+kolumna-1) = *(*(wsk+wiersz)+kolumna)+1;
  44. add_kolejka(*(*(wsk_numery+wiersz)+kolumna-1));
  45. }
  46. if(kolumna<m)
  47. if(*(*(wsk+wiersz)+kolumna+1) == -2)
  48. {
  49. *(*(wsk+wiersz)+kolumna+1) = *(*(wsk+wiersz)+kolumna)+1;
  50. add_kolejka(*(*(wsk_numery+wiersz)+kolumna+1));
  51. }
  52. if(wiersz!=0)
  53. if(*(*(wsk+wiersz-1)+kolumna) == -2)
  54. {
  55. *(*(wsk+wiersz-1)+kolumna) = *(*(wsk+wiersz)+kolumna)+1;
  56. add_kolejka(*(*(wsk_numery+wiersz-1)+kolumna));
  57. }
  58. if(wiersz<m)
  59. if(*(*(wsk+wiersz+1)+kolumna) == -2)
  60. {
  61. *(*(wsk+wiersz+1)+kolumna) = *(*(wsk+wiersz)+kolumna)+1;
  62. add_kolejka(*(*(wsk_numery+wiersz+1)+kolumna));
  63. }
  64. }
  65.  
  66.  
  67. int main()
  68. {
  69. int m,n,sx,sy,wy,wx;
  70. cin >> n;
  71. cin >> m;
  72. cin >> sy;
  73. cin >> sx;
  74. cin >> wy;
  75. cin >> wx;
  76. int **wsk;
  77. wsk=(int**)malloc(n*sizeof(int*)); // tworzymy dynamicznie wiersze tablicy.
  78.  
  79. for(int i=0; i<n; i++)
  80. { //tworzymy dynamicznie kolumny tablicy.
  81.  
  82. *(wsk+i)=(int*)malloc(m*sizeof(int));
  83. }
  84. int lic=0;
  85. for(int x = 0; x < n; ++x)
  86. for (int i = 0;i < m;i++)
  87. {
  88. cin >> lic;
  89. if(lic == 0) *(*(wsk+i)+x) = -2;
  90. else *(*(wsk+i)+x) = lic;
  91. }
  92.  
  93. int **wsk_numery;
  94. wsk_numery = (int**)malloc(n * sizeof(int*));
  95. for(int x = 0; x < n; ++x)
  96. {
  97. *(wsk_numery+x) = (int*)malloc(m * sizeof(int));
  98. }
  99. int k=0;
  100. for(int x = 0; x < n; ++x)
  101. for (int i = 0; i < m;i++)
  102. {
  103. *(*(wsk_numery+i)+x)=k;
  104. k++;
  105. }
  106. int pozycja;
  107. int wiersz,kolumna;
  108.  
  109. *(*(wsk+sx)+sy)=0;
  110. add_kolejka(*(*(wsk_numery+sx)+sy));
  111. while(licznik)
  112. {
  113.  
  114. pozycja = pop_kolejka();
  115. kolumna = oblicz_wiersz(m,pozycja);
  116. wiersz = oblicz_kolumna(m,pozycja);
  117. droga_do_wyjscia(wsk,wsk_numery,wiersz,kolumna,m);
  118. }
  119.  
  120. int g,d,p,l;
  121.  
  122. if(wx > 0)g=*(*(wsk+wx-1)+wy);
  123. else g = 9999999;
  124. d=*(*(wsk+wx+1)+wy);
  125. if( wy > 0) p=*(*(wsk+wx)+wy-1);
  126. else p = 9999999;
  127. l=*(*(wsk+wx)+wy+1);
  128. int min=100;
  129.  
  130. if (g>0)
  131. {
  132. if (g<min) { min=g; }
  133. }
  134.  
  135. if (d>0)
  136. {
  137. if (d<min) { min=d; }
  138. }
  139. if (p>0)
  140. {
  141. if (p<min) { min=p; }
  142. }
  143. if (l>0)
  144. {
  145. if (l<min) { min=l; }
  146. }
  147.  
  148. if (min==100)
  149. {
  150. cout << "NIE WYJDZIESZ ;(";
  151. }
  152. else { cout << min+1; }
  153. system("pause");
  154. return 0;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement