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

बैंकिन पायथन में एक गार्ड से सबसे कम दूरी का पता लगाएं


मान लीजिए कि हमारे पास एक मैट्रिक्स है जो तीन अक्षरों 'O', 'G', और 'W' से भरा है जहां 'O' खुले स्थान का प्रतिनिधित्व करता है, 'G' गार्ड का प्रतिनिधित्व करता है और 'डब्ल्यू' एक बैंक में दीवारों का प्रतिनिधित्व कर रहा है, हमें मैट्रिक्स में सभी ओ को एक गार्ड से उनकी सबसे छोटी दूरी के संबंध में बदलना होगा, हम किसी भी दीवार से नहीं जा सकते हैं। आउटपुट में मैट्रिक्स गार्ड को 0 से बदल दिया जाता है और दीवारों को -1 से बदल दिया जाता है।

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

O O O O G
O O O W O
O W O O O
G W W W O
O O O O G

तब आउटपुट होगा

3 3 2 1 0
2 3 3 -1 1
1 -1 4 3 2
0 -1 -1 -1 1
1 2 2 1 0

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

  • एम:=5

  • एन:=5

  • dir_row :=[-1, 0, 1, 0]

  • dir_col :=[0, 1, 0, -1]

  • एक फ़ंक्शन परिभाषित करें is_ok() । यह मैं, जम्मू ले जाएगा

  • अगर (i रेंज 0 और M में) या (j रेंज 0 और j N में), तो

    • झूठी वापसी

  • सही लौटें

  • फ़ंक्शन को परिभाषित करें isSafe() । यह i, j, मैट्रिक्स, परिणाम लेगा

  • यदि मैट्रिक्स [i, j] 'O' नहीं है या परिणाम [i, j] -1 नहीं है, तो

    • झूठी वापसी

  • सही लौटें

  • एक फ़ंक्शन को परिभाषित करें कैलकुलेट_डिस्ट ()। यह मैट्रिक्स लेगा

  • परिणाम:=क्रम M x N का एक मैट्रिक्स बनाएं और -1 से भरें

  • डबल एंडेड क्यू परिभाषित करें q

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

    • j के लिए 0 से N की सीमा में, करें

      • परिणाम [i, j] :=-1

      • यदि मैट्रिक्स [i, j] 'G' के समान है, तो

        • स्थिति :=[i, j, 0]

        • q के बाईं ओर स्थित पोज़ डालें

        • परिणाम [i, j] :=0

  • जबकि q> 0 का आकार गैर-शून्य है, करें

    • curr :=q से अंतिम तत्व हटाएं

    • एक्स, वाई, जिला:=वर्तमान [0], धारा [1], धारा [2]

    • मेरे लिए 0 से 3 की सीमा में, करें

      • अगर is_ok(x + dir_row[i], y + dir_col[i]) गैर-शून्य है और isSafe(x + dir_row[i], y + dir_col[i], मैट्रिक्स, परिणाम) शून्य नहीं है, तो

        • परिणाम [x + dir_row[i], y + dir_col[i]]:=जिला + 1

        • स्थिति :=[x + dir_row[i], y + dir_col[i], जिला + 1]

        • q के बाईं ओर स्थित पोज़ डालें

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

    • j के लिए 0 से N की सीमा में, करें

      • परिणाम प्रदर्शित करें[i, j]

    • अगली पंक्ति पर जाएँ

उदाहरण

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

from collections import deque as queue
M = 5
N = 5
dir_row = [-1, 0, 1, 0]
dir_col = [0, 1, 0, -1]
def is_ok(i, j):
   if ((i < 0 or i > M - 1) or (j < 0 or j > N - 1)):
      return False
   return True
def isSafe(i, j,matrix, result):
   if (matrix[i][j] != 'O' or result[i][j] != -1):
      return False
   return True
def calculate_dist(matrix):
   result = [[ -1 for i in range(N)]for i in range(M)]
   q = queue()
   for i in range(M):
      for j in range(N):
         result[i][j] = -1
         if (matrix[i][j] == 'G'):
            pos = [i, j, 0]
            q.appendleft(pos)
            result[i][j] = 0
   while (len(q) > 0):
      curr = q.pop()
      x, y, dist = curr[0], curr[1], curr[2]
   for i in range(4):
      if is_ok(x + dir_row[i], y + dir_col[i]) and isSafe(x + dir_row[i], y + dir_col[i], matrix, result) : result[x + dir_row[i]][y + dir_col[i]] = dist + 1
      pos = [x + dir_row[i], y + dir_col[i], dist + 1]
      q.appendleft(pos)
   for i in range(M):
      for j in range(N):
         if result[i][j] > 0:
            print(result[i][j], end=" ")
         else:
            print(result[i][j],end=" ")
      print()

matrix = [['O', 'O', 'O', 'O', 'G'],
   ['O', 'O', 'O', 'W', 'O'],
   ['O', 'W', 'O', 'O', 'O'],
   ['G', 'W', 'W', 'W', 'O'],
   ['O', 'O', 'O', 'O', 'G']]

calculate_dist(matrix)

इनपुट

[['O', 'O', 'O', 'O', 'G'],
['O', 'O', 'O', 'W', 'O'],
['O', 'W', 'O', 'O', 'O'],
['G', 'W', 'W', 'W', 'O'],
['O', 'O', 'O', 'O', 'G']]

आउटपुट

3 3 2 1 0
2 3 3 -1 1
1 -1 4 3 2
0 -1 -1 -1 1
1 2 2 1 0

  1. पायथन में कम से कम चक्र लंबाई होल्डिंग लक्ष्य खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित ग्राफ की आसन्नता सूची है, जहां सूचकांक i पर प्रत्येक सूची नोड i से जुड़े नोड्स का प्रतिनिधित्व करती है। हमारे पास एक लक्ष्य मूल्य भी है। हमें लक्ष्य वाले सबसे छोटे चक्र की लंबाई ज्ञात करनी है। अगर कोई समाधान नहीं है तो वापसी -1. तो, अगर इनपुट पसंद है 0 है, लेक

  1. पायथन में एक डुप्लीकेट सरणी से खोए हुए तत्व का पता लगाएं

    मान लीजिए कि हमारे पास दो सरणियाँ हैं जो एक तत्व को छोड़कर एक दूसरे के डुप्लिकेट हैं, इसलिए, दिए गए सरणी में से एक तत्व गायब है, हमें उस लापता तत्व को ढूंढना होगा। इसलिए, यदि इनपुट ए =[2, 5, 6, 8, 10], बी =[5, 6, 8, 10] जैसा है, तो आउटपुट 2 होगा क्योंकि दूसरी सरणी से 2 गायब है। इसे हल करने के लिए,

  1. सूची से एन सबसे बड़े तत्वों को खोजने के लिए पायथन कार्यक्रम

    एक पूर्णांक सूची को देखते हुए, हमारा कार्य सूची में N सबसे बड़े तत्वों को खोजना है। उदाहरण Input : [40, 5, 10, 20, 9] N = 2 Output: [40, 20] एल्गोरिदम Step1: Input an integer list and the number of largest number. Step2: First traverse the list up to N times. Step3: Each traverse find the largest va