Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में वर्ड लैडर (लक्षित शब्द तक पहुंचने के लिए सबसे छोटी श्रृंखला की लंबाई)

इस समस्या में हमें एक शब्दकोष और दो शब्द 'स्टार्ट' और 'टारगेट' दिए गए हैं। हमारा काम काम शुरू करने से लेकर लक्ष्य शब्द तक एक श्रृंखला (सीढ़ी) उत्पन्न करना है, श्रृंखला इस तरह बनाई जाती है कि प्रत्येक शब्द दूसरे वर्ण को केवल एक शब्द से अलग करता है और शब्द भी शब्दकोश में मौजूद होना चाहिए। लक्ष्य शब्द शब्दकोश में मौजूद है और सभी शब्दों की लंबाई भी समान है। कार्यक्रम शुरू से लक्ष्य तक सबसे छोटे पथ की लंबाई लौटाएगा।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

Dictionary = {‘HEAL’, ‘HATE’, ‘HEAT’, ‘TEAT’, ‘THAT’, ‘WHAT’ , ‘HAIL’ ‘THAE’}
Start = ‘HELL’
Target = ‘THAE’

आउटपुट

6

स्पष्टीकरण

HELL - HEAL - HEAT - TEAT - THAT - THAE

इस समस्या को हल करने के लिए, हम शब्दकोश की Breadth-first search करेंगे। अब, चरण दर चरण उन सभी तत्वों को खोजें जो पिछले वर्ण से एक अक्षर की दूरी पर हों। और शुरू से लक्ष्य तक एक सीढ़ी बनाएं।

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int wordLadder(string start, string target, set<string>& dictionary) {
   if (dictionary.find(target) == dictionary.end())
   return 0;
   int level = 0, wordlength = start.size();
   queue<string> ladder;
   ladder.push(start);
   while (!ladder.empty()) {
      ++level;
      int sizeOfLadder = ladder.size();
      for (int i = 0; i < sizeOfLadder; ++i) {
         string word = ladder.front();
         ladder.pop();
         for (int pos = 0; pos < wordlength; ++pos) {
            char orig_char = word[pos];
            for (char c = 'a'; c <= 'z'; ++c) {
               word[pos] = c;
               if (word == target)
                  return level + 1;
               if (dictionary.find(word) == dictionary.end())
                  continue;
               dictionary.erase(word);
               ladder.push(word);
            }
            word[pos] = orig_char;
         }
      }
   }
   return 0;
}
int main() {
   set<string> dictionary;
   dictionary.insert("heal");
   dictionary.insert("heat");
   dictionary.insert("teat");
   dictionary.insert("that");
   dictionary.insert("what");
   dictionary.insert("thae");
   dictionary.insert("hlle");
   string start = "hell";
   string target = "thae";
   cout<<"Length of shortest chain from '"<<start<<"' to '"<<target<<"' is: "<<wordLadder(start, target, dictionary);
   return 0;
}

आउटपुट

Length of shortest chain from 'hell' to 'thae' is: 6

  1. एक वाक्य में सबसे लंबे शब्द की लंबाई के लिए C++ प्रोग्राम

    कई स्ट्रिंग्स के वाक्य को देखते हुए और कार्य वाक्य में सबसे लंबी स्ट्रिंग की लंबाई ज्ञात करना है। उदाहरण Input-: hello I am here Output-: maximum length of a word is: 5 Input-: tutorials point is the best learning platform Output-: maximum length of a word is: 9 नीचे दिए गए कार्यक्रम में उपयोग किया

  1. C++ में जोड़े की अधिकतम लंबाई श्रृंखला

    जोड़े की एक श्रृंखला दी गई है। प्रत्येक जोड़ी में दो पूर्णांक होते हैं और पहला पूर्णांक हमेशा छोटा होता है, और दूसरा बड़ा होता है, वही नियम श्रृंखला निर्माण के लिए भी लागू किया जा सकता है। एक जोड़ी (x, y) को एक जोड़ी (p, q) के बाद जोड़ा जा सकता है, केवल अगर q

  1. सी ++ में एब्स्ट्रैक्शन

    एब्स्ट्रैक्शन में बाहरी दुनिया को केवल प्रासंगिक जानकारी प्रदान करना और पृष्ठभूमि विवरण छिपाना शामिल है। यह प्रोग्रामिंग के लिए इंटरफेस और कार्यान्वयन के पृथक्करण पर निर्भर करता है। कक्षाएं सी ++ में अमूर्तता प्रदान करती हैं। वे बाहरी दुनिया को डेटा में हेरफेर करने और बाकी वर्ग संरचना को अपने पास र