Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. #include <cstdio>
  2. using namespace std;
  3.  
  4. #define NIESKONCZONOSC  2147483647
  5.  
  6. int obliczKoszt(int a, int b)
  7. {
  8.     if (a > b)
  9.         return 1;
  10.     return
  11.         b - a + 1;
  12. }
  13.  
  14. int znajdzNajmniejszy(int czasy[], bool odwiedzone[], int ilosc)
  15. {
  16.     int min = NIESKONCZONOSC;
  17.     int min_index = -1;
  18.  
  19.     for (int i = 0; i < ilosc; i++)
  20.     {
  21.         if (odwiedzone[i] == false && czasy[i] <= min)
  22.         {
  23.             min = czasy[i];
  24.             min_index = i;
  25.         }
  26.     }
  27.  
  28.     return min_index;
  29. }
  30.  
  31. int main()
  32. {
  33.     int mapa_szerokosc;
  34.     int mapa_wysokosc;
  35.     int start_x;
  36.     int start_y;
  37.     int koniec_x;
  38.     int koniec_y;
  39.     int ilosc_wyciagow;
  40.  
  41.     scanf("%d", &mapa_szerokosc);
  42.  
  43.     scanf("%d", &mapa_wysokosc);
  44.  
  45.     scanf("%d", &start_x);
  46.  
  47.     scanf("%d", &start_y);
  48.  
  49.     scanf("%d", &koniec_x);
  50.  
  51.     scanf("%d", &koniec_y);
  52.  
  53.     scanf("%d", &ilosc_wyciagow);
  54.  
  55.     int ilosc = mapa_wysokosc * mapa_szerokosc;
  56.     int index_start = start_y * mapa_szerokosc + start_x;
  57.     int index_docelowy = koniec_y * mapa_szerokosc + koniec_x;
  58.  
  59.     int* wierzcholki = new int[ilosc];
  60.     int* czasy = new int[ilosc];
  61.     bool* odwiedzone = new bool[ilosc];
  62.  
  63.     for (int i = 0; i < ilosc; i++)
  64.         scanf("%d", &wierzcholki[i]);
  65.  
  66.     for (int i = 0; i < ilosc; i++)
  67.     {
  68.         odwiedzone[i] = false;
  69.         czasy[i] = NIESKONCZONOSC;
  70.     }
  71.    
  72.     czasy[0] = 0;
  73.  
  74.     printf("\n");
  75.     while (odwiedzone[index_docelowy] == false)
  76.     {
  77.         for (int i = 0; i < ilosc; i++)
  78.         {
  79.             if (i % mapa_szerokosc == 0)
  80.                 printf("\n");
  81.  
  82.             if (czasy[i] == NIESKONCZONOSC)
  83.                 printf("INF\t");
  84.             else
  85.                 printf("%d\t", czasy[i]);
  86.         }
  87.         printf("\n");
  88.  
  89.         int wierzcholek = znajdzNajmniejszy(czasy, odwiedzone, ilosc);
  90.  
  91.         odwiedzone[wierzcholek] = true;
  92.  
  93.         for (int i = 0; i < 4; i++)
  94.         {
  95.             int sasiad = -1;
  96.  
  97.             if (wierzcholek + 1 < ilosc)
  98.                 sasiad = wierzcholek + 1;
  99.             if (sasiad != -1 && odwiedzone[sasiad] == false)
  100.             {
  101.                 if (czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]) < czasy[sasiad])
  102.                     czasy[sasiad] = czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]);
  103.             }
  104.             else if (wierzcholek - 1 >= 0)
  105.                 sasiad = wierzcholek - 1;
  106.             if (sasiad != -1 && odwiedzone[sasiad] == false)
  107.             {
  108.                 if (czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]) < czasy[sasiad])
  109.                     czasy[sasiad] = czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]);
  110.             }
  111.             else if (wierzcholek + mapa_szerokosc < ilosc)
  112.                 sasiad = wierzcholek + mapa_szerokosc;
  113.             if (sasiad != -1 && odwiedzone[sasiad] == false)
  114.             {
  115.                 if (czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]) < czasy[sasiad])
  116.                     czasy[sasiad] = czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]);
  117.             }
  118.             else if (wierzcholek - mapa_szerokosc >= 0)
  119.                 sasiad = wierzcholek - mapa_szerokosc;
  120.             if (sasiad != -1 && odwiedzone[sasiad] == false)
  121.             {
  122.                 if (czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]) < czasy[sasiad])
  123.                     czasy[sasiad] = czasy[wierzcholek] + obliczKoszt(wierzcholki[wierzcholek], wierzcholki[sasiad]);
  124.             }
  125.  
  126.            
  127.         }
  128.     }
  129.  
  130.     for (int i = 0; i < ilosc; i++)
  131.     {
  132.         if (i % mapa_szerokosc == 0)
  133.             printf("\n");
  134.         printf("%d\t", czasy[index_docelowy]);
  135.     }
  136.    
  137.     printf("\n");
  138.    
  139.     delete[] czasy;
  140.     delete[] wierzcholki;
  141.     delete[] odwiedzone;
  142.     return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement