কম্পিউটার

C++ এ দেয়াল এবং গেটস


ধরুন আমাদের একটি m x n 2D গ্রিড আছে এবং এটি এই তিনটি সম্ভাব্য মান দিয়ে শুরু করা হয়েছে।

  • -1 দেয়াল বা বাধার জন্য।

  • একটি গেটের জন্য 0।

  • INF এটি অসীম মানে একটি খালি ঘর।

এখানে 2^31 - 1 =2147483647 হল INF কারণ আমরা ধরে নিতে পারি যে একটি গেটের দূরত্ব 2147483647 এর চেয়ে কম। প্রতিটি খালি ঘরটি তার নিকটতম গেটের দূরত্ব দিয়ে পূরণ করুন। যদি একটি গেটে পৌঁছানো অসম্ভব হয় তবে এটি INF দিয়ে পূর্ণ করা উচিত।

সুতরাং, যদি ইনপুট মত হয়

INF -1 0 INF
INF INF INF -1
INF -1 INF -1
0 -1 INF INF

তাহলে আউটপুট হবে

3 -1 0 1
2 2 1 -1
1 -1 2 -1
0 -1 3 4

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

  • আকারের একটি অ্যারে ডাইর সংজ্ঞায়িত করুন:4 x 2 :={{1, 0}, {-1, 0}, {0, 1}, {0,-1}}

  • n :=ঘরের আকার

  • m :=(যদি n অ-শূন্য হয়, তাহলে কলাম গণনা, অন্যথায় 0)

  • জোড়ার এক সারি q সংজ্ঞায়িত করুন

  • আরম্ভ করার জন্য i :=0, যখন i

    • j শুরু করার জন্য :=0, যখন j করুন

      • যদি ঘর [i, j] 0 এর মত হয়, তাহলে −

        • q

          -এ {i, j } ঢোকান
  • lvl শুরু করার জন্য :=1, যখন q খালি না থাকে, আপডেট করুন (lvl 1 দ্বারা বাড়ান), করুন −

    • sz :=q এর আকার

    • যখন sz অ-শূন্য হয়, প্রতিটি পুনরাবৃত্তিতে 1 দ্বারা sz কমান, −

      • এক জোড়া curr সংজ্ঞায়িত করুন :=q এর প্রথম উপাদান

      • q

        থেকে উপাদান মুছুন
      • x :=curr.first

      • y :=curr.second

      • আরম্ভ করার জন্য i :=0, যখন i <4, আপডেট করুন (i 1 দ্বারা বাড়ান), করবেন −

        • nx :=x + dir[i, 0]

        • ny :=y + dir[i, 1]

        • যদি nx <0 বা ny <0 বা nx>=n বা ny>=m বা রুম[nx, ny]

          • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান

        • রুম [nx, ny] :=lvl

        • q

          -এ {nx, ny } ঢোকান

উদাহরণ

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

#include  namespace ব্যবহার করে std;void print_vector(vector v){ cout <<"["; for(int i =0; i&rooms) { int n =rooms.size(); int m =n? রুম [0]. আকার():0; সারি> q; জন্য (int i =0; i  curr =q.front(); q.pop(); int x =curr.first; int y =curr.second; জন্য (int i =0; i <4; i++) { int nx =x + dir[i][0]; int ny =y + dir[i][1]; যদি (nx <0 || ny <0 || nx>=n || ny>=m || রুম[nx][ny]  v ={{2147483647,-1,0,2147483647}, {2147483647,2147483647,2147483647,-1}, 7474,747, 2147483647 -1}, {0,-1,2147483647,2147483647}}; সমাধান ob; ob.wallsAndGates(v); print_vector(v);}

ইনপুট

{{2147483647,-1,0,2147483647},{2147483647,2147483647,2147483647,-1}, {2147483647,-1,2147483647,-1,2147483647,4147483647,4747,417,417,418,47,417, /প্রে> 

আউটপুট

<প্রে>[[3, -1, 0, 1, ],[2, 2, 1, -1, ],[1, -1, 2, -1, ],[0, -1, 3, 4 , ],]

  1. একটি অ্যারে সাজানো এবং C++ এ ঘোরানো হয়েছে কিনা তা পরীক্ষা করুন

  2. C++ এ জোড় সূচকে জোড় সংখ্যা এবং বিজোড় সূচকে বিজোড় সংখ্যা

  3. C++ এ বৃত্ত এবং আয়তক্ষেত্র ওভারল্যাপিং

  4. C++ এ ডোমিনো এবং ট্রোমিনো টাইলিং