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

C++ में अधिकतम सोने का पथ


मान लीजिए m * n आकार की एक सोने की खदान ग्रिड है, इस खदान में प्रत्येक सेल में एक पूर्णांक है जो उस सेल में सोने की मात्रा दर्शाता है, 0 का अर्थ है खाली। हमें निम्नलिखित शर्तों के तहत एकत्र किए जा सकने वाले सोने की अधिकतम मात्रा ढूंढनी है:

  • हर बार जब हम एक सेल पर होते हैं, हम उस सेल का सारा सोना एकत्र करते हैं।
  • हमारी स्थिति से हम बाएं, दाएं, ऊपर या नीचे एक कदम चल सकते हैं।
  • हम एक ही सेल को एक से अधिक बार नहीं देख सकते।
  • कभी भी 0 सोने वाले सेल पर न जाएं।

उदाहरण के लिए, यदि इनपुट [[0,6,0],[5,8,7],[0,9,0]] है, तो परिणाम 24 होगा। अधिकतम सोना पाने का पथ 9 -> 8 -> 7 है।

हल करने के चरण

  • dfs नामक एक विधि बनाएं, जो grid, n, m, i और j लेती है
  • यदि i >= n या j >= m या i<0 या j<0 या grid[i][j] = -1 या grid[i][j] = 0, तो 0 वापस करें
  • temp := grid[i][j], cost := grid[i][j] और grid[i][j] = -1
  • cost := cost + max(dfs(grid,n,m,i+1,j), dfs(grid,n,m,i-1,j), dfs(grid,n,m,i,j-1), dfs(grid,n,m,i,j+1))
  • grid[i][j] := temp
  • cost वापस करें
  • मुख्य विधि:
  • n := grid की पंक्तियां, m := grid के स्तंभ, ans := 0
  • i को 0 से n-1 तक लूप करें
    • j को 0 से m-1 तक लूप करें
      • यदि grid[i][j] 0 नहीं है, तो ans := max(ans, dfs(grid,n,m,i,j))
  • ans वापस करें

उदाहरण

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int dfs(vector<vector<int>>& grid, int n, int m, int i, int j){       if(i>=n || j>=m ||i<0||j<0 || grid[i][j]==-1 || grid[i][j] == 0)return 0;       int temp =grid[i][j];       int cost = grid[i][j];       grid[i][j] = -1;       cost+=max({dfs(grid,n,m,i+1,j),dfs(grid,n,m,i-1,j),dfs(grid,n,m,i,j+1),dfs(grid,n,m,i,j-1)});       grid[i][j] = temp;       return cost;    }    int getMaximumGold(vector<vector<int>>& grid) {       int n = grid.size() ;       int m = grid[0].size();       int ans = 0;       for(int i =0;i<n;i++){          for(int j =0;j<m;j++){             if(grid[i][j]){                ans = max(ans,dfs(grid,n,m,i,j));             }          }       }       return ans;    } }; main(){    vector<vector<int>> v = {{0,6,0},{5,8,7},{0,9,0}};    Solution ob;    cout << (ob.getMaximumGold(v)); }

इनपुट

[[0,6,0],[5,8,7],[0,9,0]]

आउटपुट

24
  1. C++ में अधिकतम मोड़ों वाला पथ लंबाई C++ में अधिकतम मोड़ों वाला पथ लंबाई

    एक समस्या को हल करने के लिए जिसमें हमें एक बाइनरी ट्री दिया गया है। अब हमें अधिकतम संख्या में मोड़ों वाला पथ खोजने की आवश्यकता है। यानी, एक मोड़ तब माना जाता है जब पथ की दिशा बाएं से दाएं या इसके विपरीत बदलती है, उदाहरण के लिएइनपुट -आउटपुट -6अब इस दृष्टिकोण में, हम ट्री को पार करेंगे और पिछली गतिविध

  1. C++ में दी गई शर्तों के साथ ग्रिड में 8 संख्याएं भरें C++ में दी गई शर्तों के साथ ग्रिड में 8 संख्याएं भरें

    समस्या विवरण हम 1, 2, 3, 4, 5, 6, 7, 8 को दिए गए चित्र में आठ वृत्तों में इस तरह रखना चाहते हैं कि कोई भी संख्या उस संख्या से सटी न हो जो अनुक्रम में उसके बगल में है। इनपुट ग्रिड 0-1-10 -1-1-1-1 0-1-10 आउटपुट एल्गोरिदम चरण N := 3, M := 4 NOTCONSIDERED := -1 फ़ंक्शन present_in_grid(grid, num

  1. C++ में बाइनरी ट्री में अधिकतम पथ योग C++ में बाइनरी ट्री में अधिकतम पथ योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है जिसमें प्रत्येक नोड एक मान रखता है। हमारा कार्य बाइनरी ट्री के दो पत्तों के बीच अधिकतम पथ योग ढूंढने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक पत्ते नोड से दूसरे पत्ते नोड तक का पथ ढूंढना है जो मानों का अधिकतम योग प्रदान करेगा। यह अधिकतम योग पथ रूट न