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

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


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

इसलिए, यदि इनपुट इस तरह है

mmmp
mkmm
mmsm
ftmm

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

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

  • WHITE := 0, GRAY := 1, BLACK := 2

  • R := grid की पंक्ति संख्या

  • C := grid की स्तंभ संख्या

  • color := एक खाली मैप, जिसका डिफ़ॉल्ट मान 0 है

  • एक फ़ंक्शन dfs() परिभाषित करें। यह r, c, pr:=-1, pc:=-1 लेगा

  • color[r,c] := GRAY

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

    • (nr,nc) := (r+x, c+y)

    • यदि 0 <= nr < R और 0 <= nc < C और grid[r][c], grid[nr][nc] के समान है और (nr, nc), (pr, pc) के समान नहीं है, तो

      • यदि color[nr,nc], WHITE के समान है, तो

        • यदि dfs(nr,nc,r,c) सत्य है, तो

          • True वापस करें

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

        • True वापस करें

  • color[r,c] := BLACK

  • False वापस करें

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

    • r को 0 से R - 1 तक के लिए, करें

      • c को 0 से C - 1 तक के लिए, करें

        • यदि color[r,c], WHITE के समान है, तो

          • यदि dfs(r,c) सत्य है, तो

            • True वापस करें

  • False वापस करें

उदाहरण

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

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. पायथन प्रोग्राम में सिंपल इंटरेस्ट पायथन प्रोग्राम में सिंपल इंटरेस्ट

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

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

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

  1. Python प्रोग्राम: OpenCV का उपयोग करके इमेज के एज डिटेक्ट करना Python प्रोग्राम: OpenCV का उपयोग करके इमेज के एज डिटेक्ट करना

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