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

C++ में थ्रेशोल्ड दूरी पर सबसे कम पड़ोसियों वाला शहर ढूंढना


मान लीजिए n शहर हैं जो 0 से n-1 तक नंबरेड हैं। अगर हमारे पास ऐरे edges है जहां edges[i] = [fromi, toi, weighti] शहरों fromi और toi के बीच एक बाईडायरेक्शनल और वेटेड एज दर्शाता है, और दिया गया इंटीजर distanceThreshold है। हमें वह शहर ढूंढना है जिसमें उन शहरों की सबसे कम संख्या हो जो किसी पथ के माध्यम से पहुंच योग्य हैं और जिनकी दूरी distanceThreshold से अधिक नहीं है, अगर ऐसे एक से अधिक शहर हैं, तो सबसे बड़ी संख्या वाला शहर लौटाएं।

उदाहरण के लिए, अगर इनपुट है:

C++ में थ्रेशोल्ड दूरी पर सबसे कम पड़ोसियों वाला शहर ढूंढना

n 4 है और distanceThreshold भी 4 है, तो आउटपुट 3 होगा। ऐसा इसलिए क्योंकि:

distanceThreshold = 4 पर प्रत्येक शहर के पड़ोसी शहर हैं:

C0 -> [C1, C2]
C1 -> [C0, C2, C3]
C2 -> [C0, C1, C3]
C3 -> [C1, C2]

शहर 0 और 3 के distanceThreshold = 4 पर 2 पड़ोसी शहर हैं, लेकिन हमें शहर 3 लौटाना है क्योंकि इसकी संख्या सबसे बड़ी है।

इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:

  • ऑर्डर n x n का एक स्क्वायर मैट्रिक्स dp डिफाइन करें और इसे इनफिनिटी से भरें

  • ग्राफ का एडजेसेंसी मैट्रिक्स (कॉस्ट मैट्रिक्स) जनरेट करें और dp में स्टोर करें

  • ret := 0 और cnt := इनफिनिटी

  • k को 0 से n-1 तक लूप करें:

    • i को 0 से n-1 तक लूप करें:

      • j को 0 से n-1 तक लूप करें:

        • अगर i = j, तो अगले इटरेशन पर जाएं

        • अगर dp[i][j] > dp[i][k] + dp[k][j], तो:

          • dp[j][i] := dp[i][k] + dp[k][j]

          • dp[i][j] := dp[i][k] + dp[k][j]

  • i को 0 से n-1 तक लूप करें:

    • temp := 0

    • j को 0 से n-1 तक लूप करें:

      • temp := temp + 1 जब dp[i][j] <= t, अन्यथा temp वही रहता है

    • अगर temp <= cnt, तो cnt := temp और ret := i

  • ret लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्न इम्प्लीमेंटेशन देखें:

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int findTheCity(int n, vector<vector<int>>& e, int t) {
        vector < vector <int> > dp(n, vector <int>(n, 1e7));
        for(int i = 0; i < e.size(); i++){
            int u = e[i][0];
            int v = e[i][1];
            int w = e[i][2];
            dp[u][v] = w;
            dp[v][u] = w;
        }
        int ret = 0;
        int cnt = INT_MAX;
        for(int k = 0; k < n; k++){
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    if(i == j) continue;
                    if(dp[i][j] > dp[i][k] + dp[k][j]){
                        dp[j][i] = dp[i][j] = (dp[i][k] + dp[k][j]);
                    }
                }
            }
        }
        for(int i = 0; i < n; i++){
            int temp = 0;
            for(int j = 0; j < n; j++){
                temp += (dp[i][j] <= t);
            }
            if(temp <= cnt){
                cnt = temp;
                ret = i;
            }
        }
        return ret;
    }
};

int main(){
    vector<vector<int>> v = {{0,1,3},{1,2,1},{1,3,4},{2,3,1}};
    Solution ob;
    cout << (ob.findTheCity(4, v, 4));
}

इनपुट

4 [[0,1,3],[1,2,1],[1,3,4],[2,3,1]] 4

आउटपुट

3

  1. - C++ प्रोग्राम: अंक d वाली संख्याएं ज्ञात करना

    मान लें हमारे पास एक अंक d है, और ऊपरी सीमा n है। हमें 0 से n की सीमा में वे सभी संख्याएं ज्ञात करनी हैं जिनमें d है। इसलिए यदि n = 20, और अंक 3 है, तो संख्याएं [3, 13] होंगी। इस समस्या को हल करने के लिए, हम प्रत्येक संख्या को स्ट्रिंग के रूप में लेंगे, फिर यदि अंक स्ट्रिंग में मौजूद है, तो संख्या

  1. - C++ में सरणी में एक संख्या की फ्रीक्वेंसी ज्ञात करना

    मान लीजिए हमारे पास एक सरणी है। इसमें n अलग-अलग तत्व हैं। हमें सरणी में एक तत्व की फ्रीक्वेंसी जांचनी है। मान लीजिए A = [5, 12, 26, 5, 3, 4, 15, 5, 8, 4], यदि हम 5 की फ्रीक्वेंसी ढूंढने की कोशिश करते हैं, तो यह 3 होगी। इसे हल करने के लिए, हम सरणी को बाएं से स्कैन करेंगे, यदि तत्व दी गई संख्या के सम

  1. - C++ में दिए गए अंतर वाली जोड़ी ढूंढें

    समस्या विवरण एक सरणी A दी गई है जिसमें n विभिन्न तत्व हैं। हमें सरणी से एक जोड़ी (x, y) ढूंढनी है जिससे x और y का अंतर दिए गए अंतर d के बराबर हो। उदाहरण के लिए, यदि सरणी A = [10, 15, 26, 30, 40, 70] है और दिया गया अंतर 30 है, तो जोड़ियां (10, 40) और (30, 70) होंगी। हल दृष्टिकोण इस समस्या को हल करन