मान लीजिए हमें शहरों की सूची और एक दूसरे को जोड़ने वाली सड़कों की सूची दी गई है। सूची 'शहरों' में उन शहरों के नाम शामिल हैं जो एक टूर बस क्रम में जाते हैं। सूची 'सड़कों' में सड़कों को एक (स्रोत, गंतव्य) क्रम में सूचीबद्ध किया गया है जिसका अर्थ है कि स्रोत से गंतव्य तक एकतरफा सड़क है। अब, एक समस्या यह है कि 'शहरों' की सूची में कुछ शहरों के नामों की वर्तनी गलत हो सकती है। हमें वर्णों की न्यूनतम संख्या को बदलकर ऐसे गलत वर्तनी वाले शहर के नामों को ठीक करना होगा। हम आउटपुट के रूप में बदले गए वर्णों की संख्या लौटाते हैं।
इसलिए, यदि इनपुट शहरों की तरह है =["HWH", "DLI", "BGL"], सड़कें =[["HWH", "DLI"], ["DLI", "BCT"], ["BCT" , "HWH"]], तो आउटपुट 2 होगा।
शहरों में गलत वर्तनी वाले शहर का नाम 'बीजीएल' है। सही नाम 'बीसीटी' होगा। तो, शहरों में भी नाम सही करने के लिए हमें 2 अक्षर बदलने होंगे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें diff() । इसमें a, b
- . लगेगा
- ए और बी के बीच वर्णों में कुल अंतर लौटाएं
- आकार :=शहरों का आकार
- गिरफ्तारी:=एक नया नक्शा
- जंक्शन :=सड़कों के प्रत्येक स्रोत शहर से एक नया सेट
- जंक्शन में प्रत्येक j के लिए, करें
- arr[j] :=diff(cities[0], j)
- 1 से लेकर आकार तक के i के लिए, करें
- अगला:=एक नया नक्शा
- सड़कों में प्रत्येक r1, r2 के लिए, करें
- अगर r1 वर्तमान में गिरफ्तारी में है, तो
- लागत :=arr[r1] + diff(cities[i], r2)
- यदि r2 nxt या लागत
- next[r2] :=लागत
- अगर r1 वर्तमान में गिरफ्तारी में है, तो
- गिरफ्तारी:=अगला
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def diff(a, b): return sum(x != y for x, y in zip(a, b)) def solve(cities, roads): size = len(cities) arr = dict() junctions = set(r[0] for r in roads) for j in junctions: arr[j] = diff(cities[0], j) for i in range(1, size): nxt = dict() for r1, r2 in roads: if r1 in arr: cost = arr[r1] + diff(cities[i], r2) if r2 not in nxt or cost < nxt[r2]: nxt[r2] = cost arr = nxt return min(arr.values()) print(solve(["HWH", "DLI", "BGL"], [["HWH", "DLI"],["DLI", "BCT"], ["BCT", "HWH"]]))
इनपुट
["HWH", "DLI", "BGL"], [["HWH", "DLI"],["DLI", "BCT"], ["BCT", "HWH"]]
आउटपुट
2