আমাদের একটি স্কোয়ার ম্যাট্রিক্স দেওয়া আছে যেটিতে ০ (খালি) এবং ১ (বাধা) রয়েছে। খালি সেলে মিরর রাখা যাবে যাতে আলো নিচ থেকে ডানে যেতে পারে। মিরর [i,j]-তে থাকলে সে সারি (i) এর ডানদিকের সব সেল এবং সে কলাম (j) এর নিচের সব সেল অবশ্যই খালি (০) হতে হবে।
ইনপুট
Arr[][] = {{0,0,1,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,1,1,0,1},{1,1,1,0,1}}
আউটপুট
No. of mirrors : 3
ব্যাখ্যা: মিরর রাখা যাবে: Arr[1][0] (রো ১, কলাম ০ নিচে ও ডানে সব ০), Arr[2][0], Arr[4][4] (লাস্ট সেল, নিচে/ডানে কিছু নেই)।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- Arr[][] ম্যাট্রিক্স।
- maximumMirror(int mat[][], int n) ফাংশন মিরর কাউন্ট রিটার্ন।
- flag = বাধা আছে কিনা। count = 0।
- ম্যাট্রিক্স ট্র্যাভার্স: mat[i][j]==0 হলে নিচে (k=i+1 to n-1) এবং ডানে (l=j+1 to n-1) চেক। যেকোনো ১ পেলে flag=0, ব্রেক।
- দুই লুপের পর flag==1 হলে count++।
- count রিটার্ন।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int maximumMirror(int mat[5][5], int N){
int flag = 0, count = 0;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++) {
int k = i+1, l = j+1;
if (mat[i][j] == 0) {
while (k < N) {
if (mat[k][j] == 1) { flag = 0; break; }
else flag = 1;
k++;
}
if (flag == 1)
while (l < N) {
if (mat[i][l] == 1) { flag = 0; break; }
else flag = 1;
l++;
}
if (flag == 1) count++;
}
}
return count;
}
int main(){
int N = 5;
int mat[5][5] = {{0,0,1,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,1,1,0,1},{1,1,1,0,1}};
cout << "Maximum mirrors which can transfer light from bottom to right :" << maximumMirror(mat, N) << endl;
return 0;
}
আউটপুট
Maximum mirrors which can transfer light from bottom to right :3