GastonFontenla

Timus: 1119 - Metro

Jun 5th, 2016
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. struct Grafo
  9. {
  10.     vector <vector <int> > Adj;
  11.     vector <vector <bool> > diag;
  12.  
  13.     void bfs(int x, int y)
  14.     {
  15.         queue<pair<int, int> > cola;
  16.         cola.push(make_pair(x, y));
  17.         Adj[x][y] = 0;
  18.  
  19.         while(cola.size())
  20.         {
  21.             x = cola.front().first, y = cola.front().second;
  22.             cola.pop();
  23.  
  24.             if(x+1 < Adj.size() && Adj[x][y]+10000 < Adj[x+1][y])
  25.             {
  26.                 cola.push(make_pair(x+1, y));
  27.                 Adj[x+1][y] = Adj[x][y]+10000;
  28.             }
  29.             if(y+1 < Adj[0].size() && Adj[x][y]+10000 < Adj[x][y+1])
  30.             {
  31.                 cola.push(make_pair(x, y+1));
  32.                 Adj[x][y+1] = Adj[x][y]+10000;
  33.             }
  34.             if(x+1 < Adj.size() && y+1 < Adj[0].size())
  35.             {
  36.                 if(diag[x+1][y+1] && Adj[x][y]+14142 < Adj[x+1][y+1])
  37.                 {
  38.                     cola.push(make_pair(x+1, y+1));
  39.                     Adj[x+1][y+1] = Adj[x][y]+14142;
  40.                 }
  41.             }
  42.         }
  43.     }
  44.  
  45.     void leer()
  46.     {
  47.         int n, m, d, a, b;
  48.         cin >> n >> m >> d;
  49.         Adj = vector <vector <int> > (m+1, vector <int> (n+1, 999999999));
  50.         diag = vector <vector <bool> > (m+1, vector <bool> (n+1, false));
  51.  
  52.         for(int i=0; i<d; i++)
  53.         {
  54.             cin >> a >> b;
  55.             diag[b][a] = true;
  56.         }
  57.         bfs(0, 0);
  58.  
  59.         int v = (int)round(Adj[m][n]/100.0);
  60.         cout << v << endl;
  61.     }
  62.  
  63. };
  64.  
  65. int main()
  66. {
  67.     Grafo g;
  68.     g.leer();
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment