निम्नलिखित समस्या दैनिक समाचार पत्र क्रॉसवर्ड का एक उदाहरण है, यहां हमें 2-आयामी वर्ण सरणी दी गई है और समस्या कथन 2-आयामी वर्ण सरणी भूलभुलैया से दिए गए शब्द का पता लगाना है। खोज एल्गोरिदम में अलग-अलग वर्ण ढूंढना शामिल है ऊपर से नीचे ,दाएं से बाएं और इसके विपरीत लेकिन तिरछे नहीं।
आइए उदाहरणों से समझते हैं
इनपुट- स्ट्रिंग शब्द-लेज़
2डी स्ट्रिंग[ ] - { "LOAPYS", "KAYSOT", "LAYSST", "MLVAYS", "LAYSAA", "LAOYLS"};
आउटपुट- 2डी कैरेक्टर ऐरे में दिए गए स्ट्रिंग्स की संख्या:7
स्पष्टीकरण - जैसा कि हमें शब्दों की स्ट्रिंग सरणी के साथ दिया गया है और उनमें से, हमें "LAYS" शब्द ढूंढना है, जिसे टॉप-बॉटम, राइट-लेफ्ट, बॉटम-टॉप और लेफ्ट-राइट जैसे किसी भी दिशा में खोजा जा सकता है। हर बार दी गई खोज स्ट्रिंग मिलने पर कोड में काउंटर फ्लैग जुड़ जाता है, और परिणाम के लिए अंत में गिनती वापस कर दी जाती है। उदाहरण में, हम देख सकते हैं कि LAYS 7 बार बनता है अर्थात
1->एल ओए पवाईएस -LAYS-> बाएं से दाएं
2 ->एस एवाईए ओएल -ले (दाएं से बाएं)
3->लेज टी-ले (बाएं से दाएं)
4->एमएल वीAYS- लेज़ (बाएं से दाएं)
5->लेसा ए-लेज़ (बाएं से दाएं)
6->ला ओYLS -ले (बाएं से दाएं)
7->(नीचे से ऊपर) लाल परतों में
इनपुट- स्ट्रिंग शब्द- कैंप
2डी स्ट्रिंग[ ] - { "BLOOKS", "BPOOLK", "KOHPKB", "BOLKOK", "LKIOOB", "LAHYBL"}
आउटपुट- 2डी कैरेक्टर ऐरे में दिए गए स्ट्रिंग की संख्या की संख्या:0
स्पष्टीकरण-: जैसा कि हमें शब्दों की स्ट्रिंग सरणी के साथ दिया गया है और उनमें से, हमें "LAYS" शब्द ढूंढना है, जिसे टॉप-बॉटम, राइट-लेफ्ट, बॉटम-टॉप और लेफ्ट-राइट जैसे किसी भी दिशा में खोजा जा सकता है। हर बार दी गई खोज स्ट्रिंग मिलने पर कोड में काउंटर फ्लैग जुड़ जाता है, और परिणाम के लिए अंत में गिनती वापस कर दी जाती है। उदाहरण में, हम देख सकते हैं कि BOOK बनता है 0 बार।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
- हमें एक स्ट्रिंग (शब्द) और स्ट्रिंग सरणी के साथ दिया गया है जो कुछ उपयोगिता चर के साथ आगे की प्रक्रिया के लिए फाइंडस्ट्रिंग () में पारित किया जाता है।
- मैट्रिक्स में वर्णों का पता लगाया जाता है और स्ट्रिंग शुरू करने के लिए एक वर्ण उठाया जाता है।
- उस चरित्र के लिए जिसे चुना गया है, हम दिए गए स्ट्रिंग के लिए एल्गोरिथम के अनुसार सभी संभव दिशाओं में पुनरावर्ती रूप से पाते हैं
- यदि कोई मिलान पाया जाता है तो काउंटर बढ़ा दिया जाता है
- पहले प्रारंभिक चरित्र के साथ किए जाने के बाद, प्रक्रिया फिर अगले चरित्र के लिए दोहराई जाती है
- गिनती के योग की गणना संबंधित मैचों के साथ की जाती है
- तब अंतिम उत्तर कैप्चर किया जाता है, और परिणाम मुद्रित किया जाता है।
उदाहरण
#include <bits/stdc++.h> using namespace std; int utilitySearch(string word, int r, int c, string arr[], int maxR, int maxC, int index) { int count = 0; if (r >= 0 && r <= maxR && c >= 0) { if (c <= maxC && word[index] == arr[r][c]) { char res = word[index]; index = index + 1; arr[r][c] = 0; if (word[index] == 0) { count = 1; } else { count = count + utilitySearch(word, r, c + 1, arr, maxR, maxC, index); count = count + utilitySearch(word, r, c - 1, arr, maxR, maxC, index); count = count + utilitySearch(word, r + 1, c, arr, maxR, maxC, index); count = count + utilitySearch(word, r - 1, c, arr, maxR, maxC, index); } arr[r][c] = res; } } return count; } int findString(string word, int r, int c, string str[], int countR, int countC) { int count = 0; for (int i = 0; i < countR; ++i) { for (int j = 0; j < countC; ++j) { count = count + utilitySearch(word, i, j, str, countR - 1, countC - 1, 0); } } return count; } int main() { string word = "FLOOD"; string inp[] = {"FPLIOKOD","FLOODYUT","YFLOODPU","FMLOSODT","FILPOYOD", FLOOOODE " }; string str[(sizeof(inp) / sizeof( * inp))]; for (int i = 0; i < (sizeof(inp) / sizeof( * inp)); ++i) { str[i] = inp[i]; } cout << "Count of number of given string in 2D character array: " << findString(word, 0, 0, str, (sizeof(inp) / sizeof( * inp)), str[0].size()); return 0; }
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
आउटपुट
Count of number of given string in 2D character array: 6