Monday, 24 March 2025

Codeforces problem(800) :- Beautiful matrix

Beautiful Matrix সমস্যার সি++ সমাধান - বাংলা ব্যাখ্যা

Beautiful Matrix সমস্যার সি++ সমাধান - বাংলা ব্যাখ্যা

এই পোস্টে আমরা "Beautiful Matrix" নামের একটি প্রোগ্রামিং সমস্যার সমাধান করবো সি++ ভাষায়। সমস্যাটির উদ্দেশ্য হলো একটি ৫×৫ ম্যাট্রিক্সে একটি "১" কে মাঝখানে (৩য় সারি, ৩য় কলাম) নিয়ে আসার জন্য সর্বনিম্ন কতগুলো মুভ লাগবে তা বের করা। প্রতিটি মুভে আমরা পাশাপাশি দুটি সারি বা কলাম অদলবদল করতে পারি। এখানে আমি আমার সমাধানের প্রতিটি লাইন বাংলায় বিস্তারিতভাবে ব্যাখ্যা করবো।

সমস্যার বিবরণ

আমাদের দেওয়া আছে একটি ৫×৫ ম্যাট্রিক্স যেখানে ২৪টি শূন্য (০) এবং একটি এক (১) আছে। আমাদের লক্ষ্য হলো এই "১" কে ম্যাট্রিক্সের মাঝখানে (৩য় সারি, ৩য় কলাম, বা ০-ভিত্তিক ইনডেক্সে ২,২) নিয়ে আসা। আমরা শুধু পাশের সারি বা কলাম অদলবদল করতে পারি।

সি++ কোড

#include <bits/stdc++.h>
using namespace std;

int main() {
    const int n = 5;
    vector<vector<int>> matrix(n, vector<int>(n));
    int row, col;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cin >> matrix[i][j];
            if(matrix[i][j] == 1) {
                row = i;
                col = j;
            }
        }
    }
    int moves = abs(row - 2) + abs(col - 2);
    cout << moves << endl;
    return 0;
}

লাইন বাই লাইন বাংলা ব্যাখ্যা

লাইন ১: #include <bits/stdc++.h>

এই লাইনটি সি++ এর স্ট্যান্ডার্ড লাইব্রেরির সব হেডার ফাইল ইনক্লুড করে। এটি আমাদের প্রয়োজনীয় সব ফাংশন যেমন vector, cin, cout, abs ইত্যাদি ব্যবহার করতে দেয়। এটি একটি শর্টকাট যা সাধারণত প্রতিযোগিতামূলক প্রোগ্রামিংয়ে ব্যবহৃত হয়।

লাইন ২: using namespace std;

এটি আমাদের std নেমস্পেসের সবকিছু সরাসরি ব্যবহার করার অনুমতি দেয়। যেমন, আমাদের std::cin এর পরিবর্তে শুধু cin লিখতে হবে।

লাইন ৪: int main() {

এটি প্রোগ্রামের মূল ফাংশন। প্রোগ্রাম শুরু হয় এখান থেকে এবং এটি একটি ইন্টিজার (পূর্ণসংখ্যা) রিটার্ন করে।

লাইন ৫: const int n = 5;

এখানে আমরা একটি ধ্রুবক (constant) ভেরিয়েবল n ডিফাইন করছি যার মান ৫। এটি ম্যাট্রিক্সের আকার নির্দেশ করে (৫×৫)। const মানে এটি পরিবর্তন করা যাবে না।

লাইন ৬: vector<vector<int>> matrix(n, vector<int>(n));

এটি একটি ৫×৫ ম্যাট্রিক্স তৈরি করে vector ব্যবহার করে। vector হলো একটি গতিশীল অ্যারে। এখানে:

  • vector<int>(n) মানে ৫টি ইন্টিজারের একটি ভেক্টর (ডিফল্ট মান ০)।
  • vector<vector<int>> matrix(n, ...) মানে ৫টি সারির একটি ভেক্টর, যেখানে প্রতিটি সারিতে ৫টি কলাম আছে।
ফলে আমরা একটি ৫×৫ ম্যাট্রিক্স পাই।

লাইন ৭: int row, col;

এখানে দুটি ভেরিয়েবল row এবং col ডিফাইন করা হয়েছে। এগুলো "১" এর বর্তমান সারি এবং কলামের ইনডেক্স সংরক্ষণ করবে।

লাইন ৮: for(int i = 0; i < n; i++) {

এটি একটি লুপ যা ০ থেকে ৪ পর্যন্ত চলে (মোট ৫ বার, কারণ n = 5)। এটি ম্যাট্রিক্সের প্রতিটি সারির জন্য কাজ করে। i হলো সারির ইনডেক্স।

লাইন ৯: for(int j = 0; j < n; j++) {

এটি একটি ভেতরের লুপ যা প্রতিটি সারির ৫টি কলামের জন্য চলে। j হলো কলামের ইনডেক্স।

লাইন ১০: cin >> matrix[i][j];

এটি ব্যবহারকারীর কাছ থেকে ইনপুট নেয় এবং matrix[i][j] পজিশনে সংরক্ষণ করে। আমরা ৫টি লাইনে ৫টি করে সংখ্যা ইনপুট দেবো।

লাইন ১১: if(matrix[i][j] == 1) {

এটি চেক করে যে বর্তমান পজিশনে (i, j) যদি "১" থাকে।

লাইন ১২: row = i;

যদি "১" পাওয়া যায়, তাহলে row ভেরিয়েবলে সেই সারির ইনডেক্স (i) সেট করা হয়।

লাইন ১৩: col = j;

একইভাবে, col ভেরিয়েবলে "১" এর কলামের ইনডেক্স (j) সেট করা হয়।

লাইন ১৪-১৫: } এবং }

এগুলো দুটি for লুপ বন্ধ করে। ইনপুট শেষে আমরা "১" এর পজিশন জানি।

লাইন ১৬: int moves = abs(row - 2) + abs(col - 2);

এটি সর্বনিম্ন মুভের সংখ্যা গণনা করে:

  • abs(row - 2): "১" এর বর্তমান সারি থেকে টার্গেট সারি (২) এর দূরত্ব। abs পরম মান দেয়।
  • abs(col - 2): "১" এর বর্তমান কলাম থেকে টার্গেট কলাম (২) এর দূরত্ব।
  • দুটির যোগফল হলো মোট মুভ।
এটি ম্যানহাটন দূরত্ব নামে পরিচিত।

লাইন ১৭: cout << moves << endl;

এটি moves এর মান প্রিন্ট করে এবং একটি নতুন লাইন যোগ করে।

লাইন ১৮: return 0;

এটি প্রোগ্রাম শেষ করে এবং ০ রিটার্ন করে, যা বোঝায় প্রোগ্রাম সফলভাবে চলেছে।

লাইন ১৯: }

এটি main ফাংশন বন্ধ করে।

উদাহরণ

ইনপুট:

0 0 0 0 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

ব্যাখ্যা: "১" আছে (১, ৪) পজিশনে। মুভ = |১-২| + |৪-২| = ১ + ২ = ৩।

আউটপুট:

কেন এটি কাজ করে?

প্রতিটি মুভে "১" একটি পজিশন সরে। সারি এবং কলামের দূরত্ব আলাদাভাবে গণনা করে আমরা সর্বনিম্ন মুভ পাই। এটি সবচেয়ে দ্রুত এবং সহজ পদ্ধতি।

Problem link: https://codeforces.com/contest/263/problem/A
Share:

Related Posts:

0 comments:

Post a Comment