1 Answers
সুপার রোমিও মার্চের শুরুতে টুম্ব রেইডার লারা ক্রফটের প্রেমে পড়লো। কিন্তু লারা ক্রফট ছেলেদেরকে যত না ভালোবাসতো তারচে' বেশি ভালোবাসতে কবরের মধ্যে গিয়ে দৌড়াদৌড়ি করতে। সুপার রোমিও তবুও অনেক আশা নিয়ে চুইঙ্গামের মত লেগে থাকলো, কিন্তু এর কিছুদিন পর লারা ক্রফটের সাথে সুপারম্যানের ইয়ে হয়ে গেলো। সুপার রোমিও মুখ বাঁকা করে বসে থাকলো, কারণ এবার সে বুঝতে পারলো ওর আর কোন চান্সই নেই! :'(
এদিকে হলো কি, ওর চুপচাপ গুটিসুটি মেরে উদাস উদাস হয়ে বসে থাকা দেখে বিলকিস বাণু ওর প্রেমে পড়ে গেলো। কারণ বিলকিস বাণু কবিতা পড়তে খুব ভালোবাসে আর ওর ধারণা একটু দেবদাস দেবদাস টাইপের ছেলে না হলে নাকি প্রেম জমে না। কিন্তু সুপার রোমিও তো বিলকিস বাণুর সাথে প্রেম করবেই না। তো সে করলো কি, শহরে পালিয়ে গেলো - মতিঝিলে গিয়ে এফিডেফিট করে নিজের নাম পাল্টে রাখলো, সুপার মারিও। আর সেই ফাঁকে সে দেখলো একটা বিশাল বিলবোর্ডে বিপাশা বসু একটা সাবান নিয়ে 'কিছু একটা' করছে একদম সব্বার সামনে(চিচিচি!), ঠিক রাস্তার উপরে!(চিচিচিচি!) তো সেই 'কিছু একটা' দেখে তার মনে প্রেম প্রেম ভাব হলো, সে ঠিক করলো বিপাশা বসুকে গিয়ে বলবে ওর সাথে প্রেম করতে।
কিন্তু সমস্যা হলো, বিপাশা বসু থাকে হচ্ছে প্যান্ট ঢিলা মাস্তানের পাড়ায়। এবং কেউ একজন বিপাশা বসুর সাথে প্রেম নিবেদন করতে গেলেই সে ধরে কষে একটা মাইর দিয়ে দেয়। এইজন্যই নাকি সুপারম্যান কখনো বিপাশা বসুর কাছাকাছি যেতে পারেনি। তার ছিঁড়া মজনু এসে বলল ওর কাছে নাকি একটা ম্যাপ আছে, সেখানে পরিষ্কার করে লেখা আছে কোথায় কোথায় দেয়াল আর কোথায় কোথায় প্যান্ট ঢিলা মাস্তানের চ্যালারা অপেক্ষা করছে, আর কোথায় বিপাশা বসু।
ম্যাপটা দেখে বলতে হবে, সুপার মারিও বিপাশা বসুর কাছাকাছি যেতে পারবে কিনা। আর যদি পারে, তাহলে সে যত তাড়াতাড়ি সম্ভব তত তাড়াতাড়ি প্রেম নিবেদন করতে চায়। কারণ সে শুনেছে স্পাইডারম্যানও নাকি কাছে ধারেই আছে। সে যদি আগে এসে চামে চামে প্রেম নিবেদন করে দেয়, তাহলে বিপাশা বসুর কাছে সুপার মারিও কোন বেইল ই পাবে না!
সুপার মারিও চিৎকার করে বলল, দেখাও তোমার ম্যাপ! তার ছিঁড়া মজনু ওর পিছনের পকেট থেকে একটা ময়লা গ্রাফ পেপার বের করলো, সেটাতে লেখা ছিল
MX.....XB.
..X..X.X..
...X.X.X..
.....X....
তারপর তার ছিঁড়া মজনু করলো কি, এদিক ওদিক তাকিয়ে তারপর ফিসফিস করে তোমাকে ওর ম্যাপটা বুঝিয়ে দিলো - M টা হলো মজনুর বাড়ি, যেখানে ওরা এখন বসে বসে ফন্দি করছে, আর X গুলো হলো প্যান্ট ঢিলা মাস্তানের চ্যালাদের আড্ডা মারার চায়ের দোকান, ভুলেও ওদের কাছাকাছি গেলে ওরা ধরে স্ক্রু টাইট করে দিবে। আর . গুলোতে কোন সমস্যা নাই - ওখান দিয়ে হাঁটা যাবে। কিন্তু এই পাড়ার নিয়ম হচ্ছে সব কিছুতে সোজাসুজি করতে হবে, কোণাকুনি হাঁটা যাবে না। ও কোণাকুনি হাঁটে এটা শুনলে কিছুতেই বিপাশা বসু ওকে বিয়ে করবে না।
তার ছিঁড়া মজনুকে সুপার মারিও জিজ্ঞেস করলো, কতক্ষণ হাঁটতে হবে। সে বলল, প্রতিটা . পার হতে এক মিনিট লাগবে। তারপর সে জানতে চাইলো, আসলে কখনো পৌছাতে পারবো তো। তখন তার ছিঁড়া মজনু ভাবতে শুরু করলো, কিন্তু অনেকক্ষণ মাথা চুলকিয়েও সে কিছুতেই বের করতে পারলো না কিছু। সুপার মারিও খুব বিরক্ত হয়ে ঘন্টাখানেক ওর মাথা চুলকানো দেখলো, তারপর তোমার কাছে চলে আসলো, কারণ তুমি নাকি কম্পিউটার দিয়ে খুটখাট করে কঠিন কঠিন সব কাজ করে ফেলতে পারো।
হুমম, এখন দেখো আমাদের কি করতে হচ্ছে। মজনু তার ঘর থেকে উপরে, বামে, ডানে আর নিচে যেতে পারছে। আমরা যদি সাধারণ গ্রাফ পেপারের মতো নাম্বারিং করি তাহলে ঘরগুলোর কো অর্ডিনেট হচ্ছে এরকম
(0,0) (0,1) (0,2) ....
(1,0) (1,1) (1,2) ....
(2,0) (2,1) (2,2) ....
.
.
.
মানে যদি কোন ঘর (i,j) হয় তাহলে ওর উপর নিচের ঘরগুলোর কো অর্ডিনেট এরকম হবে।
(i-1,j-1) (i-1, j) (i-1,j+1)
( i,j-1) ( i, j) ( i,j+1)
(i+1,j-1) (i+1, j) (i+1,j+1)
খেয়াল করো, মারিও কিন্তু প্রতিটা ঘরে গিয়ে একই কাজ করবে, উপরে যাবার চেষ্টা করবে, বামে যাবার চেষ্টা করবে, ডানে যাবার চেষ্টা করবে, তারপর নিচে যাবার চেষ্টা করবে - যদি কখনো দেখে সে চায়ের দোকানের দিকে এগোচ্ছে সে ফিরে আসবে, তারপর আবার বাকি দিকগুলো দেখবে।
যেহেতু সে একই কাজ বারবার করছে সেহেতু আমরা একটা ফাংশনকে রিকার্সিভলি ডেকেই পুরো কাজটা করতে পারি তাই না? তাহলে জিনিসটা দাড়াবে এরকম -
char map[100][100];
int found = 0;
void check( int i, int j ) {
if( map[i][j] == 'B' ) found = 1; // mario can reach bipasa
else if( map[i][j] == 'X' ) return;
else {
check(i-1,j);
check(i,j-1);
check(i,j+1);
check(i+1,j);
}
}
মূল ব্যাপারটা অনেকটা এরকমই - তবে তোমার চেক করতে হবে তুমি কখনো বাউন্ডারির বাইরে চলে যাচ্ছো কিনা। সেজন্য ফাংশনটায় এরকম একটা লাইন জুড়ে দিতে হবে।
if( i < 0 || j < 0 || i >= totalrow || j >= totalcol ) return;
এই খোঁজাখুঁজির ব্যাপারগুলোকে বলা হয় সার্চিং আর এই মাত্র আমরা রিকার্সিভ ভাবে যে সার্চটা করলাম এটার নাম হচ্ছে Depth First Search কারণ সে যখনই দেখছে সে ঘরটাতে ঢুকতে পারছে, সে সেই ঘরটা থেকে আরো গভীরে গিয়ে খোঁজাখুঁজি করছে।