मेरी सी ++ काम के लिए, मैं मूल रूप से (है कि मेरे वेक्टर vec
स्ट्रीम है) में शुरुआत एक पाठ फ़ाइल में पाठ का एक हिस्सा के माध्यम से खोज करने के लिए कोशिश कर रहा हूँ बाईं ओर दूसरा शीर्ष चरित्र। यह एक पाठ भूलभुलैया के लिए है, जहां अंत में मेरा कार्यक्रम पात्रों को इसके माध्यम से पथ के लिए मुद्रित करना है।एल्गोरिथ्म एक पाठ के माध्यम से स्क्रीन पथ (ओं) को मुद्रित करने के लिए भूलभुलैया
एक उलझन का एक उदाहरण होगा जैसे:
###############
Sbcde####efebyj
####hijk#m#####
#######lmi#####
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
कहाँ '#' एक unwalkable दीवार है और आप हमेशा दूसरे शीर्ष चरित्र पर छोड़ दिया पर शुरू करते हैं। वर्णमाला वर्ण चलने योग्य वर्गों का प्रतिनिधित्व करते हैं। बाहर निकलें हमेशा दाईं ओर हैं। भूलभुलैया हमेशा एक maze.text फ़ाइल में 15x15 आकार है। वर्णमाला वर्ण एक ही भूलभुलैया के भीतर दोहराते हैं, लेकिन सीधे एक दूसरे के बगल में नहीं।
मैं यहां क्या करने की कोशिश कर रहा हूं: यदि वर्तमान के बगल में एक वर्ग में वर्णमाला वर्ण है, तो इसे वेक्टर vec
पर जोड़ें, और जब तक मैं भूलभुलैया के अंत तक नहीं पहुंच जाता तब तक इस प्रक्रिया को दोहराएं। आखिरकार मुझे कुछ मैज में मौजूद स्क्रीन के कई पथों को प्रिंट करके इसे और अधिक जटिल बनाना है।
अब तक मैं एल्गोरिथ्म ही है, जो मुझे पता है के लिए यह राशि गलत है:
void pathcheck()
{
if (isalpha(vec.at(x)) && !(find(visited.begin(), visited.end(), (vec.at(x))) != visited.end()))
{
path.push_back(vec.at(x));
visited.push_back(vec.at(x));
pathcheck(vec.at(x++));
pathcheck(vec.at(x--));
pathcheck(vec.at(x + 16));
pathcheck(vec.at(x - 16));
}
}
visited
दौरा वर्गों की मेरी ट्रैक वेक्टर रखते हुए है।
मैं इसे कैसे अपडेट करूं ताकि यह वास्तव में काम करता है, और अंततः मैं एक से अधिक पथ प्रबंधित कर सकता हूं (यानी यदि 2 पथ थे, तो प्रोग्राम दोनों स्क्रीन पर प्रिंट करेगा)? मुझे याद किया जा रहा है कि मुझे एक और वेक्टर/सरणी की आवश्यकता हो सकती है जो उन वर्गों का ट्रैक रखती है जिन्हें मैंने पहले से देखा/चेक किया है, लेकिन फिर मैं इसे यहां कैसे लागू करूं?
आपको यह याद रखना होगा कि आप कहां गए हैं ताकि आप इसे फिर से न देख सकें। अन्यथा आप एक कदम आगे एक कदम आगे जा रहे हैं, और कोई भी इस तरह से बहुत दूर चला जाता है ... –
अद्यतन। लेकिन मुझे पता है कि रिकर्सिव कॉल में मेरा vec.at गलत है ... मुझे क्या रखना है? – forthewinwin
क्या आप यह भी जांच रहे हैं कि आप 15x15 भूलभुलैया क्षेत्र से बाहर नहीं कदम रखते हैं? –