কম্পিউটার

C++-এ ভূত এস্কেপ করুন


ধরুন আমরা একটি সরলীকৃত Pacman গেম খেলছি। এখন আমরা বিন্দুতে শুরু করি (0, 0), এবং আমাদের গন্তব্য হল (লক্ষ্য[0], লক্ষ্য[1])। মানচিত্রে বেশ কয়েকটি ভূত রয়েছে, এখানে i-th ভূত শুরু হয় (ভূত[i][0], ভূত[i][1])। প্রতিটি পালা, আমরা এবং সমস্ত ভূত একই সাথে (হতে পারি) 4টি মূল দিকগুলির মধ্যে একটিতে চলে যাই - উত্তর, পূর্ব, পশ্চিম বা দক্ষিণ, শেষ বিন্দু থেকে দূরত্বের একটি নতুন বিন্দু 1 ইউনিটে যাচ্ছি। আমরা পালাতে পারি যদি কোনো ভূত আমাদের কাছে পৌঁছানোর আগেই লক্ষ্যে পৌঁছাতে পারি (যে কোনো প্রদত্ত পদক্ষেপের জন্য ভূতেরা যেতে পারে।) যদি আমরা ভূতের মতো একই সময়ে কোনো স্কোয়ারে (লক্ষ্য সহ) পৌঁছাই, তবে তা হয় না। একটি অব্যাহতি হিসাবে গণনা. তাই পালানো সম্ভব হলে সত্যে ফিরে আসতে হবে।

সুতরাং যদি ইনপুট হয় [[1,0], [0,3]], এবং লক্ষ্য [0,1] হয়, তাহলে ফলাফল সত্য হবে। এর কারণ হল আমরা সরাসরি গন্তব্যে (0, 1) পৌঁছাতে পারি 1 সময়ে, যখন (1, 0) বা (0, 3) এ অবস্থিত ভূত আমাদের ধরার কোনো উপায় নেই৷

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • আমি :=|টার্গেট[1]| + |লক্ষ্য[0]|
  • x :=0
  • আমি রেঞ্জ 0 থেকে ঘোস্ট অ্যারের আকার - 1
    • x :=|ভূত[i,0] – লক্ষ্য[0]| + |ভূত[i, 1] – লক্ষ্য[1]|
    • যদি x <=me, তাহলে মিথ্যা ফেরত দিন
  • সত্যে ফিরে আসুন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) {
      int me = abs(target[1]) + abs(target[0]);
      int x = 0;
      for(int i = 0; i < ghosts.size(); i++){
         x = abs(ghosts[i][0] - target[0]) + abs(ghosts[i][1] - target[1]);
         if(x <= me) return false;
      }
      return true;
   }
};
main(){
   vector<vector<int>> v1 = {{1,0}, {0,3}};
   vector<int> v2 = {0,1};
   Solution ob;
   cout << (ob.escapeGhosts(v1, v2));
}

ইনপুট

[[1,0],[0,3]]
[0,1]

আউটপুট

1

  1. C++ এ গোলকধাঁধা II

  2. C++ এ গোলকধাঁধা

  3. C++ এ বিজয়ীর ভবিষ্যদ্বাণী করুন

  4. C++ এ ধাঁধা III