Advertisement
AdamTheGreat

Untitled

Jul 29th, 2022
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. #include <queue>
  5. using namespace std;
  6.  
  7. int main(void) {
  8.     string word, toword;
  9.     cin >> word >> toword;
  10.     int n;
  11.     cin >> n;
  12.     map<string, int> dictionary;
  13.     for (int i = 0; i < n; i++) {
  14.         string temp;
  15.         cin >> temp;
  16.         dictionary[temp] = -1;
  17.     }
  18.     queue<string> noteboook;
  19.     noteboook.push(word);
  20.     dictionary[word] = 0;
  21.     while (!noteboook.empty()) {
  22.         string current = noteboook.front();
  23.         noteboook.pop();
  24.         // 3 possible ways to change the word: replace a letter, insert a letter, delete a letter
  25.         // change the letter
  26.         for (int i = 0; i < current.length(); i++) {
  27.             string newword = current;
  28.             for (int j = 0; j < 26; j++) {
  29.                 newword[i] = 'a' + j;
  30.                 if (dictionary[newword] != 0 && newword != current) {
  31.                     if (newword == toword) {
  32.                         cout << dictionary[current] + 1 << endl;
  33.                         return 0;
  34.                     }
  35.                     noteboook.push(newword);
  36.                     dictionary[newword] = dictionary[current] + 1;
  37.                 }
  38.             }
  39.         }
  40.         // insert letter
  41.         for (int i = 0; i < n; i++) {
  42.             string newword = current;
  43.             for (int j = 0; j < 26; j++) {
  44.                 newword.insert(i, 1, 'a' + j);
  45.                 if (dictionary[newword] != 0) {
  46.                     if (newword == toword) {
  47.                         cout << dictionary[current] + 1 << endl;
  48.                         return 0;
  49.                     }
  50.                     noteboook.push(newword);
  51.                     dictionary[newword] = dictionary[current] + 1;
  52.                 }
  53.             }
  54.         }
  55.         // remove letter
  56.         for (int i = 0; i < n; i++) {
  57.             string newword = current;
  58.             newword.erase(i, 1);
  59.             if (dictionary[newword] != 0) {
  60.                 if (newword == toword) {
  61.                     cout << dictionary[current] + 1 << endl;
  62.                     return 0;
  63.                 }
  64.                 noteboook.push(newword);
  65.                 dictionary[newword] = dictionary[current] + 1;
  66.             }
  67.         }
  68.     }
  69.     cout << "No Solution" << endl;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement