কম্পিউটার

C++ এ একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালগুলি গণনা করুন


আমরা n এবং m দুটি ভেরিয়েবল যা n x m আকারের একটি গ্রিড এবং প্রারম্ভিক বিন্দু x,y থেকে শুরু করে।

এছাড়াও পদক্ষেপের জোড়া/চালগুলি দেওয়া হয়েছে যেগুলি ((1,1), (2,2) ) ইত্যাদি হিসাবে গ্রিডের ভিতরে অতিক্রম করার জন্য নেওয়া যেতে পারে। প্রতিটি জোড়া পদক্ষেপ x,y অক্ষে নেওয়া পদক্ষেপের একককে প্রতিনিধিত্ব করে। লক্ষ্য হল সীমানার মধ্যে গ্রিডের ভিতরে অতিক্রম করার জন্য নেওয়া যেতে পারে এমন মোট পদক্ষেপগুলি খুঁজে বের করা [1, n] X [1,m] যদি n 5 এবং m হয় 4 এবং বর্তমান অবস্থান 2,2 এবং নির্বাচিত ধাপ হল ( 1,-1) তারপর একবার এই পদক্ষেপটি নেওয়ার ফলে (3,1), এই পদক্ষেপটি আবার নেওয়ার ফলে (4,-1) হবে যা বৈধ নয় কারণ -1 সীমার বাইরে।

C++ এ একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালগুলি গণনা করুন

আসুন উদাহরণ দিয়ে বুঝতে পারি

ইনপুট − A =3, B =4, x =1, y =1; মুভ ={ 1, 1 }, { 0, -1 }

আউটপুট − একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালের গণনা হল −4

ব্যাখ্যা

<প্রে>চালনা বেছে নেওয়া {1,1} =→ (2,2) → (3,3) - 3 পদক্ষেপ নির্বাচন করা {0,-1} =→ (3,2) → (3,1) - 2 ধাপ মোট 4 পদক্ষেপ।

ইনপুট − A =4, B =4, x =2, y =2; মুভ ={ 2, 1 }, { -2, -3 }

আউটপুট − একটি গ্রিডে প্রদত্ত দিকে সম্ভাব্য চালের গণনা হল − 1

ব্যাখ্যা

চালনা বেছে নেওয়া {2,1} =→ (4,3) - 1 ধাপ1চালনা বেছে নেওয়া {-2,-3} =→ (2,0) X সীমার বাইরে মোট 1 ধাপ

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ

এই পদ্ধতিতে আমরা পেয়ার হিসাবে ধাপগুলি উপস্থাপন করে একটি ভেক্টর তৈরি করব। বিন্দু x,y থেকে অতিক্রম করা শুরু করুন। ভেক্টর থেকে একটি ধাপ বেছে নিন এবং উভয় দিকে (x অক্ষ এবং y অক্ষ) নেওয়া ন্যূনতম মানটি বেছে নিন। ন্যূনতম নির্বাচিত আরও পদক্ষেপ নেওয়ার অনুমতি দেবে। নির্দিষ্ট দিকে যাওয়ার জন্য, যদি cur অবস্থান x ( বা y ) হয়> n (বা m) তাহলে n (বা m) এ পৌঁছাতে চালের সংখ্যা হল ( n - cur অবস্থান )/x। যদি এটি কম হয় তবে 1 এ পৌঁছানোর জন্য চালনার সংখ্যা হবে ( cur অবস্থান - 1 )/x৷

  • AXB গ্রিডের প্রতিনিধিত্ব করার জন্য A,B ভেরিয়েবল এবং শুরুর বিন্দুর জন্য x,y নিন।

  • চাল হিসাবে পূর্ণসংখ্যা জোড়া রয়েছে এমন একটি ভেক্টর নিন (ভেক্টর >)।

  • ফাংশন possible_moves(int x, int y, int A, int B, ভেক্টর> মুভ, int সাইজ) সমস্ত ভেরিয়েবল এবং মুভ নেয় এবং একটি গ্রিডে প্রদত্ত দিকে সম্ভাব্য চালগুলির গণনা প্রদান করে।

  • ফাংশন সম্ভব

  • এখন temp_x 0 হলে INT_MAX রিটার্ন মানকে সর্বোচ্চ হিসাবে পরিণত করুন।

  • যদি temp_x হয়> 0 তাহলে A-তে পৌঁছানোর চল হবে | A-x |/temp_x

  • অন্যথায় 1 চালের দিকে যাওয়ার জন্য হবে | x-1 |/temp_x।

  • অনুরূপ গণনাকৃত চালগুলি ফেরত দিন৷

  • সম্ভাব্য_মুভস() এর ভিতরে, প্রাথমিক গণনা 0 হিসাবে নিন।

  • i=0 থেকে i পর্যন্ত লুপের জন্য ট্রাভার্স ভেক্টর

  • temp_x=move[i].first এবং temp_y=move[i].second হিসাবে বর্তমান জোড়া থেকে স্থানাঙ্ক বের করুন।

  • সম্ভাব্য ফাংশন ব্যবহার করে ন্যূনতম সম্ভাব্য চাল হিসাবে পরিবর্তনশীল চেক নিন().

  • মোট ধাপের জন্য গণনা করার জন্য চেকের ন্যূনতম মান যোগ করা হবে।

  • এখন যেহেতু আমরা চেক বেছে নিয়েছি, x এবং y চেক করে আপডেট করুন।

  • শেষ পর্যন্ত আমরা একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালগুলির মোট গণনা পাব

  • ফলাফল হিসাবে রিটার্ন গণনা।

উদাহরণ

#include নেমস্পেস ব্যবহার করে std;int সম্ভব(int x, int temp_x, int A){ if(temp_x ==0){ ফেরত INT_MAX; } যদি (temp_x> 0){ ফেরত abs((A - x) / temp_x); } অন্য{ রিটার্ন abs((x - 1) / temp_x); }}int possible_moves(int x, int y, int A, int B, ভেক্টর> move, int size){ int count =0; জন্য (int i =0; i > move ={ { 2, -1 }, { 0, 1 }, { 1, -2 } }; int size =move.size(); cout<<"একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালগুলির গণনা হল:"<<সম্ভাব্য_চালগুলি(x, y, A, B, সরানো, আকার); রিটার্ন 0;

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালগুলির গণনা হল:3

  1. C++ এ প্রদত্ত সংখ্যা সহ অ্যারের উপাদানগুলির গড় ঘটনা গণনা করুন

  2. C++ এ প্রদত্ত ম্যাট্রিক্সে 1s এর বর্গাকার সাবম্যাটিক্সের সংখ্যা গণনা করার প্রোগ্রাম

  3. C++ এ প্রদত্ত স্ট্রিং থেকে সম্ভাব্য দৈর্ঘ্যের সাব-স্ট্রিংগুলির গণনা

  4. C++ এ প্রদত্ত আকারের আয়তক্ষেত্রের ভিতরে সম্ভাব্য রম্বির সংখ্যা গণনা করুন