ধরুন আমাদের কাছে একটি দ্বি-মাত্রিক বাইনারি ম্যাট্রিক্স রয়েছে, যা একটি আয়তক্ষেত্রাকার দাবা বোর্ডের প্রতিনিধিত্ব করে, এখানে 0 হল খালি ঘরের জন্য এবং 1 হল একটি নাইটের জন্য। নাইট অনুভূমিকভাবে দুটি বর্গক্ষেত্র দূরে এবং একটি বর্গক্ষেত্র উল্লম্বভাবে বা দুটি বর্গক্ষেত্র উল্লম্বভাবে এবং একটি বর্গক্ষেত্র অনুভূমিকভাবে (দাবা বোর্ড নাইটের মতো) সরাতে সক্ষম। আমাদের পরীক্ষা করতে হবে যে কোন দুই নাইট একে অপরকে আক্রমণ করছে কি না।
সুতরাং, যদি ইনপুট মত হয়
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
তারপর আউটপুট হবে True
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- সারি, কল :=ম্যাট্রিক্সের সারি গণনা, ম্যাট্রিক্সের কলাম গণনা
- 0 থেকে সারি-1 রেঞ্জের জন্য, করুন
- 0 থেকে col-1 এর মধ্যে c এর জন্য, করুন
- যদি A[r][c] অ-শূন্য হয়, তাহলে
- প্রতিটি nr, nc-এর জন্য [(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)] , do
- যদি nr সারির পরিসরে হয় এবং nc col এর পরিসরে এবং A[nr, nc] অ-শূন্য হয়, তাহলে
- সত্য ফেরান
- যদি nr সারির পরিসরে হয় এবং nc col এর পরিসরে এবং A[nr, nc] অ-শূন্য হয়, তাহলে
- প্রতিটি nr, nc-এর জন্য [(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)] , do
- যদি A[r][c] অ-শূন্য হয়, তাহলে
- 0 থেকে col-1 এর মধ্যে c এর জন্য, করুন
- মিথ্যে ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, A): row, col = len(A), len(A[0]) for r in range(row): for c in range(col): if A[r][c]: for nr, nc in ((r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)): if 0 <= nr < row and 0 <= nc <col and A[nr][nc]: return True return False ob = Solution() mat = [[0,0,0,0,0], [0,1,0,0,0], [0,0,0,1,0]] print(ob.solve(mat))
ইনপুট
[[0,0,0,0,0], [0,1,0,0,0], [0,0,0,1,0]]
আউটপুট
True