AlenAntonelli

LCS

Oct 24th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4.  
  5. #define ARRIBA 1
  6. #define IZQUIERDA 2
  7. #define DIAGONAL 3
  8.  
  9. using namespace std;
  10.  
  11. string CLS (string &a, string &b)
  12. {
  13.     int tamA = a.size();
  14.     int tamB = b.size();
  15.    
  16.     vector < vector<int> > m (tamA+1, (vector<int> (tamB+1, 0) ) );
  17.     vector < vector<int> > p (tamA+1, (vector<int> (tamB+1, 0) ) );
  18.    
  19.     for (int i=1; i<=tamA; i++)
  20.     {
  21.         for (int j=1; j<=tamB; j++)
  22.         {
  23.             if ( a[i-1] == b[j-1] )
  24.             {
  25.                 m[i][j] = m[i-1][j-1] + 1;
  26.                 p[i][j] = DIAGONAL;
  27.             }
  28.             else if (m[i][j-1] >= m[i-1][j])
  29.             {
  30.                 m[i][j] = m[i][j-1];
  31.                 p[i][j] = IZQUIERDA;
  32.             }
  33.             else
  34.             {
  35.                 m[i][j] = m[i-1][j];
  36.                 p[i][j] = ARRIBA;
  37.             }
  38.         }
  39.     }
  40.    
  41.     string resultado;
  42.    
  43.     int i=tamA, j=tamB;
  44.     while ( m[i][j] )
  45.     {
  46.         if (p[i][j] == ARRIBA)
  47.             i--;
  48.         else if (p[i][j] == IZQUIERDA)
  49.             j--;
  50.         else if (p[i][j] == DIAGONAL)
  51.         {
  52.             resultado = a[i-1] + resultado;
  53.             i--, j--;
  54.         }
  55.     }
  56.    
  57.     return resultado;
  58. }
  59.  
  60. int main()
  61. {
  62.     string a = "ancle";
  63.     string b = "pale";
  64.    
  65.     string lcs = CLS(a,b);
  66.    
  67.     cout<<lcs;
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment