मान लीजिए कि हमारे पास डिक्शनरी नामक शब्दों की एक सूची है और हमारे पास दो और स्ट्रिंग्स प्रारंभ और अंत हैं। हम एक समय में एक वर्ण को बदलकर शुरू से अंत तक पहुंचना चाहते हैं और प्रत्येक परिणामी शब्द भी शब्दकोश में होना चाहिए। शब्द केस-संवेदी होते हैं। इसलिए हमें अंत तक पहुँचने के लिए न्यूनतम कदमों की संख्या ज्ञात करनी होगी। यदि संभव न हो तो -1 लौटें।
इसलिए, यदि इनपुट शब्दकोश =["मई", "रे", "चूहा"] प्रारंभ ="चूहा" अंत ="मई" जैसा है, तो आउटपुट 3 होगा, क्योंकि हम इस पथ का चयन कर सकते हैं:["चूहा ", "रे", "मे"]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
शब्दकोश:=सभी अद्वितीय तत्वों के साथ एक नया सेट inq =एक जोड़ी के साथ एक डबल एंडेड कतार (प्रारंभ, 1) जबकि q खाली नहीं है, करें (शब्द, दूरी):=q का बायां तत्व, और हटा दें बायां तत्व यदि शब्द अंत के समान है, तो i के लिए दूरी 0 से शब्द -1 के आकार तक, "abcdefghijklmnopqrstuvwxyz" में प्रत्येक वर्ण c के लिए करें, अगला_वर्ड करें:=शब्द [सूचकांक 0 से i - 1] सी को संयोजित करें संक्षिप्त शब्द [सूचकांक (i + 1) से अंत तक] यदि अगला_शब्द शब्दकोश में है, तो qreturn -1 के अंत में शब्दकोश डालने से अगला_शब्द हटाएं (अगला_शब्द, दूरी + 1)उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
संग्रह से आयात dequeclass समाधान:def समाधान (स्व, शब्दकोश, प्रारंभ, अंत):शब्दकोश =सेट (शब्दकोश) q =deque ([(प्रारंभ, 1)]) जबकि q:शब्द, दूरी =q.popleft( ) अगर शब्द ==अंत:सीमा में मैं के लिए वापसी दूरी (लेन (शब्द)):"abcdefghijklmnopqrstuvwxyz" में सी के लिए:अगला_शब्द =शब्द [:i] + सी + शब्द [i + 1:] अगर शब्दकोश में अगला_शब्द:शब्दकोश .remove(next_word) q.append((next_word, दूरी + 1)) वापसी -1ob =समाधान () शब्दकोश =["मई", "रे", "चूहा"] प्रारंभ ="चूहा" अंत ="हो सकता है" प्रिंट (ob.solve(शब्दकोश, प्रारंभ, अंत))इनपुट
["may", "ray", "rat"], "rat", "may"आउटपुट
3