Advertisement
AskTomorrow

Untitled

Feb 28th, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. ///Необходимо реализовать метод
  10. ///о алгоритме можно прочитать в источниках указанных в программе курса, или на странице курса в ЛМС
  11. /// или в презентациях к семинару.
  12. int Wagner_Fischer(string &s, string &t)
  13. {
  14.     int d[s.length() + 3][t.length() + 3];
  15.  
  16.     for (int i = 0; i <= s.length() + 2; i++)
  17.     {
  18.         for (int j = 0; j <= t.length() + 2; j++)
  19.         {
  20.             d[i][j] = 0;
  21.         }
  22.     }
  23.  
  24.     for (int i = 0; i <= s.length() + 2; i++)
  25.     {
  26.         for (int j = 0; j <= t.length() + 2; j++)
  27.         {
  28.             d[i][0] = i;
  29.             d[0][j] = j;
  30.         }
  31.     }
  32.  
  33.     int res = 0;
  34.  
  35.     for (int i = 1; i <= s.length(); i++)
  36.     {
  37.         for (int j = 1; j <= t.length(); j++)
  38.         {
  39.             if (s[i - 1] == t[j - 2] && s[i - 2] == t[j - 1] && i > 1 && j > 1)
  40.             {
  41.                 if (s[i - 1] != t[j - 1])
  42.                 {
  43.                     res = 1;
  44.                 }
  45.                 d[i][j] = min(
  46.                         min(d[i - 1][j] + 1,
  47.                             d[i][j - 1] + 1),
  48.                         min(d[i - 1][j - 1] + res,
  49.                             d[i - 2][j - 2] + 1));
  50.             }
  51.             else
  52.             {
  53.                 if (s[i - 1] != t[j - 1])
  54.                 {
  55.                     res = 1;
  56.                 }
  57.                 d[i][j] = min(
  58.                         min(d[i - 1][j] + 1,
  59.                             d[i][j - 1] + 1),
  60.                         d[i - 1][j - 1] + res);
  61.             }
  62.         }
  63.     }
  64.  
  65.     return d[s.length()][t.length()];
  66. }
  67.  
  68. ///Не изменять метод main без крайней необходимости
  69. ///ОБЯЗАТЕЛЬНО добавить в комментариях подробные пояснения и причины побудившие вас изменить код этого метода.
  70. int main(int argc, const char *argv[])
  71. {
  72.     int n;
  73.     fstream fin;
  74.     fstream fout;
  75.     fin.open("input.txt", ios::in);
  76.     fout.open("output.txt", ios::out);
  77.     if (fin.is_open())
  78.     {
  79.         string N;
  80.         getline(fin, N);
  81.         n = atoi(N.c_str());
  82.         for (int i = 0; i < n; i++)
  83.         {
  84.             string s;
  85.             string t;
  86.             getline(fin, s);
  87.             getline(fin, t);
  88.             fout << Wagner_Fischer(s, t) << (i == n - 1 ? "" : " ");
  89.         }
  90.         fout.close();
  91.         fin.close();
  92.     }
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement