এই সমস্যাতে, n পূর্ণসংখ্যার একটি মেইজ দেওয়া আছে, প্রতিটি পূর্ণসংখ্যা যেতে হবে কতগুলো মুভ নির্দেশ করে। সাথে দিক নির্দেশ করা আছে '>' এবং '<' ব্যবহার করে। আমাদের কাজ হলো বের করা মেইজ থেকে বের হওয়া সম্ভব কিনা যদি স্টার্টিং পয়েন্ট ০ ইনডেক্সে থাকে।
উদাহরণ:
ইনপুট -
3 2 1 1 4 > < > >
আউটপুট - YES
ব্যাখ্যা - শুরুর পজিশন থেকে, আমরা ২ পজিশন आगे যাব, তারপর ১ পজিশন आगे, তারপর ৪ পজিশন आगे। এতে মেইজ থেকে বের হয়ে যাব।
সমাধানের জন্য, আমরা চেক করব মেইজ থেকে বের হওয়া সম্ভব কিনা। এর জন্য либо ০-এর নিচে যেতে হবে অথবা n-এর উপরে। ০ থেকে শুরু করে, দেওয়া পূর্ণসংখ্যা পরিমাণ অনুযায়ী চিহ্ন অনুযায়ী ডিরেকশন প্রসেস করব। এবং শেষে পৌঁছানো হয়েছে কিনা চেক করব।
একটি আরো কন্ডিশন ontstaan করতে পারে: ইনফিনিট লুপ, অর্থাৎ যখন ইউজার কখনো মেইজ থেকে বের হয় না, এটি হয় যখন আমরা একটি ভিজিট করা পজিশনে ফিরে আসি। তাই এই কন্ডিশন চেক করতে আমরা সব ভিজিট করা প্লেসмар্ক করব।
উদাহরণ
সমাধানের প্রোগ্রাম:
#include <iostream>
using namespace std;
void isMazeSolvable (int a[], int n, string s) {
int mark[n] = {0};
int start = 0;
int possible = 1;
while (start >= 0 && start < n) {
if (s == "<") {
if (mark[start] == 0) {
mark[start] = 1;
start -= a[start];
} else {
possible = 0;
break;
}
} else {
if (mark[start] == 0) {
mark[start] = 1;
start += a[start];
} else {
possible = 0;
break;
}
}
}
if (possible == 0)
cout << "It stays inside the maze forever";
else
cout << "It will come out of the maze";
}
int main() {
int n = 3;
string s = "><<";
int a[] = { 1, 2, 4 };
isMazeSolvable (a, n, s);
} আউটপুট
It will come out of the maze