Advertisement
Guest User

Untitled

a guest
Jul 31st, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <list>
  4.  
  5. using namespace std;
  6.  
  7. class Coordonnees
  8. {
  9.     public:
  10.     Coordonnees(int xx = 0, int yy = 0);
  11.  
  12.     friend bool operator==(Coordonnees const& a, Coordonnees const& b);
  13.  
  14.     int x, y;
  15. };
  16.  
  17. class Element
  18. {
  19.     public:
  20.     Element(Coordonnees coord = Coordonnees(), int cases = 0);
  21.  
  22.     Coordonnees position;
  23.     int parcouru;
  24. };
  25.  
  26. int cheminPlusCourt(vector<vector<int> > const& laby, int lignes, int colones);
  27. bool valable(vector<vector<int> > const& laby, Coordonnees suivante, int lignes, int colones);
  28.  
  29. int main()
  30. {
  31.     int lignes(0), colones(0), buffer(0);
  32.     vector<vector<int> > laby;
  33.  
  34.     cin >> lignes;
  35.     cin >> colones;
  36.  
  37.     for(int i(0); i < lignes; i ++)
  38.     {
  39.         laby.push_back(vector<int>());
  40.  
  41.         for(int j(0); j < colones; j ++)
  42.         {
  43.             cin >> buffer;
  44.             laby[i].push_back(buffer);
  45.         }
  46.  
  47.     }
  48.  
  49.     cout << cheminPlusCourt(laby, lignes, colones);
  50.  
  51.     return 0;
  52. }
  53.  
  54. int cheminPlusCourt(vector<vector<int> > const& laby, int lignes, int colones)
  55. {
  56.     queue<Element> file;
  57.     list<Coordonnees> visite;
  58.     Coordonnees fin(lignes - 1, colones - 1);
  59.     Element actuel;
  60.     bool stop(false);
  61.  
  62.     file.push(Element());
  63.  
  64.     while(!file.empty())
  65.     {
  66.         actuel = file.pop();
  67.         for(list<Coordonnees>::iterator it(visite.begin()); it != visite.end(); it ++)
  68.         {
  69.             if(*it == actuel.position)
  70.             {
  71.                 stop = true;
  72.                 break;
  73.             }
  74.  
  75.  
  76.         }
  77.  
  78.         if(!stop)
  79.         {
  80.             visite.push_back(actuel.position);
  81.  
  82.             if(actuel.position == fin)
  83.                 return actuel.parcouru;
  84.  
  85.             if(valable(laby, Coordonnees(actuel.position.x - 1, actuel.position.y), lignes, colones))
  86.                 file.push(Element(Coordonnees(actuel.position.x - 1, actuel.position.y), actuel.parcouru + 1));
  87.  
  88.             if(valable(laby, Coordonnees(actuel.position.x + 1, actuel.position.y), lignes, colones))
  89.                 file.push(Element(Coordonnees(actuel.position.x + 1, actuel.position.y), actuel.parcouru + 1));
  90.  
  91.             if(valable(laby, Coordonnees(actuel.position.x, actuel.position.y - 1), lignes, colones))
  92.                 file.push(Element(Coordonnees(actuel.position.x, actuel.position.y - 1), actuel.parcouru + 1));
  93.  
  94.             if(valable(laby, Coordonnees(actuel.position.x, actuel.position.y - 1), lignes, colones))
  95.                 file.push(Element(Coordonnees(actuel.position.x, actuel.position.y + 1), actuel.parcouru + 1));
  96.  
  97.         }
  98.  
  99.     }
  100.  
  101.     return -1;
  102. }
  103.  
  104. bool valable(vector<vector<int> > const& laby, Coordonnees suivante, int lignes, int colones)
  105. {
  106.     if(suivante.x >= 0 && suivante.x < lignes && suivante.y >= 0 && suivante.y <= 0)
  107.         if(laby[suivante.x][suivante.y] == 0)
  108.             return true;
  109.  
  110.     return false;
  111. }
  112.  
  113. Coordonnees::Coordonnees(int xx, int yy) : x(xx), y(yy)
  114. {}
  115.  
  116. bool operator==(Coordonnees const& a, Coordonnees const& b)
  117. {
  118.     if(a.x == b.x && a.y == b.y)
  119.         return true;
  120.     else
  121.         return false;
  122. }
  123.  
  124. Element::Element(Coordonnees coord, int cases) : position(coord), parcouru(cases)
  125. {}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement