Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में 2डी ग्रिड में चक्रों का पता लगाने का कार्यक्रम

मान लीजिए कि हमारे पास वर्णों की एक 2D सरणी है, जिसे m x n आकार का ग्रिड कहा जाता है। हमें यह जांचना होगा कि हम इसके अंदर एक चक्र का पता लगा सकते हैं या नहीं। यहां एक चक्र ग्रिड में लंबाई 4 या अधिक का पथ है जो एक ही स्थिति में शुरू और समाप्त होता है। हम चार दिशाओं (ऊपर, नीचे, बाएँ, या दाएँ) में जा सकते हैं, यदि इसका वर्तमान सेल का मान समान है, और हम किसी सेल पर दोबारा नहीं जा सकते।

तो, अगर इनपुट पसंद है

m मी मी p
मी k मी मी
मी मी s मी
f टी मी मी

तो आउटपुट सही होगा, क्योंकि हरे रंग की कोशिकाएं चक्र बना रही हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • सफेद:=0, ग्रे:=1, काला:=2

  • आर:=ग्रिड की पंक्ति गणना

  • सी :=ग्रिड की कॉलम संख्या

  • रंग :=एक खाली नक्शा, जिसका डिफ़ॉल्ट मान 0

    . है
  • फ़ंक्शन को परिभाषित करें dfs() । इसमें r, c, pr:=-1,pc:=-1

    लगेगा
  • रंग [आर, सी]:=ग्रे

  • di में प्रत्येक जोड़ी (x,y) के लिए, do

    • (एनआर,एनसी) :=(आर+एक्स,सी+वाई)

    • अगर 0 <=एनआर <आर और 0 <=एनसी <सी और ग्रिड [आर, सी] ग्रिड के समान है [एनआर, एनसी] और (एनआर, एनसी) (पीआर, पीसी) के समान नहीं है, तो

      • अगर रंग [एनआर, एनसी] सफेद के समान है, तो

        • अगर dfs(nr,nc,r,c) सत्य है, तो

          • सही लौटें

        • अन्यथा जब color[nr,nc] GRAY के समान हो, तब

          • सही लौटें

      • रंग [आर, सी]:=काला

      • झूठी वापसी

      • मुख्य विधि से, निम्न कार्य करें

      • r के लिए 0 से R-1 की सीमा में, करें

        • सी के लिए 0 से सी -1 की सीमा में, करो

          • अगर रंग [आर, सी] सफेद के समान है, तो

            • अगर dfs(r,c) सत्य है, तो

              • सही लौटें

  • झूठी वापसी

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें

from collections import defaultdict
di = [(0,1),(1,0),(0,-1),(-1,0)]
def solve(grid):
   WHITE,GRAY,BLACK = 0 ,1 ,2
   R,C = len(grid),len(grid[0])

   color = defaultdict(int)

   def dfs(r,c,pr=-1,pc=-1):
      color[r,c] = GRAY
      for x,y in di:
         nr,nc = r+x,c+y
         if (0<=nr<R and 0<=nc<C and grid[r][c] == grid[nr][nc] and (nr,nc)!=(pr,pc)):
            if color[nr,nc]==WHITE:
               if dfs(nr,nc,r,c):
                  return True
            elif color[nr,nc] == GRAY:
               return True

      color[r,c] = BLACK
      return False

   for r in range(R):
      for c in range(C):
         if color[r,c] == WHITE:
            if dfs(r,c):
               return True
   return False
matrix = [["m","m","m","p"],["m","k","m","m"],["m","m","s","m"],["f","m","m","m"]]
print(solve(matrix))

इनपुट

7, [5,1,4,3]

आउटपुट

True

  1. पायथन कार्यक्रम में साधारण रुचि

    इस लेख में, हम Python 3.x में साधारण ब्याज की गणना के बारे में जानेंगे। या पहले। साधारण रुचि भुगतानों के बीच बीते दिनों की संख्या से दैनिक ब्याज दर को मूल राशि से गुणा करके गणना की जाती है। गणितीय रूप से, साधारण ब्याज =(पी एक्स टी एक्स आर)/100 कहां, पी मूल राशि है T समय है और आर दर है उदाहर

  1. पायथन प्रोग्राम में सिलेक्शन सॉर्ट

    इस लेख में, हम Python 3.x में सिलेक्शन सॉर्ट और उसके कार्यान्वयन के बारे में जानेंगे। या पहले। चयन क्रम . में एल्गोरिथम, एक सरणी को पुनरावर्ती रूप से अनसोल्ड भाग से न्यूनतम तत्व ढूंढकर और शुरुआत में सम्मिलित करके सॉर्ट किया जाता है। किसी दिए गए सरणी पर चयन क्रम के निष्पादन के दौरान दो उप-सरणी बनते

  1. OpenCV का उपयोग करके छवि के किनारों का पता लगाने के लिए पायथन प्रोग्राम

    इस समस्या में, हम देखेंगे कि पायथन किसी छवि या वीडियो फ़ाइल के किनारों का पता कैसे लगा सकता है। इसे प्राप्त करने के लिए, हमें OpenCV लाइब्रेरी की आवश्यकता है। OpenCV लाइब्रेरी मुख्य रूप से कंप्यूटर विज़न के लिए डिज़ाइन की गई है। यह खुला स्रोत है। मूल रूप से इसे इंटेल द्वारा डिजाइन किया गया था। यह ओप