Hints Break the problem into pieces and then solve each piec

Hints

Break the problem into pieces and then solve each piece. I suggest writing the code in the following steps:

? Read the words into a set (i.e. build the dictionary); Be able to test the set for a “word”

? Write a function that can generate the 5 letter sequences that are 1 letter different from a given

input; identify the sequences that actually words

? Generate a queue of stacks using hardcoded data

? Combine the above functionality to create word ladders

Solution

#include <iostream>
#include \"console.h\"
#include \"lexicon.h\"
#include \"queue.h\"
#include \"simpio.h\"
#include \"vector.h\"
#include \"filelib.h\"
using namespace std;

const string FILENAME = \"welcome\";

Vector<string> getLadder(string start, string end);
void printLadder(Vector<string> &ladder);
void getLexicon(Set<string> &lexicon);

int main() {
Vector<string> ladder;
string start, end;
  
while (true) {
   start = getLine(\"Enter Starting word : \");
   if (start.size() == 0) break;
   end = getLine(\"Enter ending word : \");
   cout << \"Searching please wait.........\" << endl;
  
   // if length of start and end are different then there is no word ladder
   if (start.size() != end.size())
   cout << \"No word ladder found\" << endl << endl;
   else {
   ladder = getLadder(start, end);
   printLadder(ladder);
   }
}
cout << \"End of the game!!!\" << endl;
return 0;
}

/* here I am using breadth-first search algorithm to return a ladder of words
starting from the string \"start\" upto the string \"end\"*/
Vector<string> getLadder(string start, string end) {
Set<string> lexicon;
getLexicon(lexicon);

//To store partial ladders
Queue< Vector<string> > ladderQ;
  
// To track current ladder
Vector<string> cl; // current ladder is represented as cl

// Set of words used to create ladder
Set<string> uw; // set of words is represented as uw

uw.add(start);
cl.add(start);
ladderQ.enqueue(cl);
  
while (!ladderQ.isEmpty()) {
   // get current ladder from top of the queue
   cl = ladderQ.dequeue();
   string lw = cl[cl.size() - 1]; // here lastword is represented as lw
  
   // check whether the last word in the ladder is destination wordor not
   if (lw == end)
   return cl;

   // add words in next hop to new ladders and add those ladders to bottom of the queue
   string newWord;
   for (int i = 0; i < lw.length(); i++) {
   for (char ch = \'a\'; ch <= \'z\'; ch++) {
       newWord = lw.substr(0, i) + ch + lw.substr(i+1);
       if (lexicon.contains(newWord) && (!uw.contains(newWord))) {
       Vector<string> newLadder = cl;
       newLadder.add(newWord);
       ladderQ.enqueue(newLadder);
       uw.add(newWord);
       }
   }
   }
}

// if no ladder built till destination word then return empty ladder
Vector<string> emptyLadder;
return emptyLadder;
}

// Reads a set of english words from file and add them to the \"lexicon\"
// here set of stringsare passed as argument.

void getLexicon(Set<string> &lexicon) {
ifstream infile;
string line;
if (!openFile(infile, FILENAME)) error(\"Error reading file.\");
while (true) {
   getline(infile, line);
   if (infile.fail()) break;
   lexicon.add(line);
}
}

// Below function Prints the \"ladder\"
void printLadder(Vector<string> &ladder) {
if (ladder.size() > 0) {
   for (int i = 0; i < ladder.size(); i++) {
   cout << ladder[i];
   if (i != ladder.size() - 1)
       cout << \" -> \";
   }
} else
   cout << \"No word ladder found.\";
cout << endl << endl;
}

Hints Break the problem into pieces and then solve each piece. I suggest writing the code in the following steps: ? Read the words into a set (i.e. build the di
Hints Break the problem into pieces and then solve each piece. I suggest writing the code in the following steps: ? Read the words into a set (i.e. build the di
Hints Break the problem into pieces and then solve each piece. I suggest writing the code in the following steps: ? Read the words into a set (i.e. build the di

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site