ধরুন আমাদের একটি বাইনারি 2D ম্যাট্রিক্স আছে, এখন আমাদের 0s দিয়ে ভরা সমস্ত আয়তক্ষেত্রের শুরু বিন্দু এবং সমাপ্তি বিন্দু খুঁজে বের করতে হবে। আমাদের মনে রাখতে হবে যে আয়তক্ষেত্রগুলি আলাদা এবং একে অপরকে স্পর্শ করে না তবে তারা অ্যারের সীমানা স্পর্শ করতে পারে। শুধুমাত্র একক উপাদান সহ একটি আয়তক্ষেত্রও সম্ভব।
সুতরাং, যদি ইনপুট −
এর মত হয়1 | 0 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 1 | 0 | 1 |
তাহলে আউটপুট হবে [[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1] , 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন সংজ্ঞায়িত করুন find_rect()। এটি i,j,a,output,index নেবে
- x :=সারি গণনা
- y :=কল গণনা
- পতাকা_কল :=0
- পতাকা_সারি :=0
- m-এর জন্য i থেকে x, do
- যদি a[m, j] 1 এর মত হয়, তাহলে
- পতাকা_সারি :=1
- বিরতি
- যদি a[m, j] 5 এর সমান হয়, তাহলে
- কিছুই করবেন না
j থেকে y রেঞ্জের মধ্যে n এর জন্য - করুন
- যদি a[m, n] 1 এর মত হয়, তাহলে
- পতাকা_কল :=1
- ব্রেক
- a[m, n] :=5
- যদি a[m, n] 1 এর মত হয়, তাহলে
- যদি ফ্ল্যাগ_রো 1 এর মত হয়, তাহলে
- আউটপুট[সূচী] শেষে m-1 ঢোকান
- অন্যথায়,
- আউটপুট[সূচী] শেষে m ঢোকান
- যদি flag_col 1 এর মত হয়, তাহলে
- আউটপুট[সূচী] শেষে n-1 ঢোকান
- অন্যথায়,
- আউটপুট[সূচী] শেষে n প্রবেশ করান
- যদি a[m, j] 1 এর মত হয়, তাহলে
- প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
- n :=a এর আকার
- op :=একটি নতুন তালিকা
- idx :=-1
- আমি 0 থেকে n রেঞ্জের জন্য, কর
- j-এর জন্য 0 থেকে a[0] এর আকারের মধ্যে,
- যদি a[i, j] 0 এর মত হয়, তাহলে
- অপ-এ [i,j] ঢোকান
- idx :=idx + 1
- find_rect(i, j, a, op, idx)
- করুন
- যদি a[i, j] 0 এর মত হয়, তাহলে
উদাহরণ কোড
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def find_rect(i,j,a,output,index):x =len(a) y =len(a[0]) flag_col =0 flag_row =0 m range (i,x):যদি a [m][j] ==1:flag_row =1 বিরতি যদি a[m][j] ==5:n রেঞ্জে (j, y):যদি a[m][n] ==1:flag_col =1 break a[m][n] =5 if flag_row ==1:output[index].append(m-1) else:output[index].append(m) if flag_col ==1:output[index] .append(n-1) else:output[index].append(n)def get_coord(a):n =len(a) op =[] idx =-1 in range(0,n):j এর জন্য পরিসরে(0, len(a[0])):যদি a[i][j] ==0:op.append([i, j]) idx =idx + 1 find_rect(i, j, a, op , idx) প্রিন্ট (অপ) পরীক্ষা =[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0 , 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0 , 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]get_coord(পরীক্ষা)পূর্বে>ইনপুট
<প্রে>[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1] ],[1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]