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

C++ में DFS का उपयोग करके द्वीपों की संख्या खोजना

समस्या विवरण

इस समस्या में, हमें एक 2D बाइनरी मैट्रिक्स दिया गया है। हमारा कार्य DFS का उपयोग करके द्वीपों की संख्या खोजना है।

द्वीप मैट्रिक्स में 1 या अधिक जुड़े 1 का समूह है।

उदाहरण

इनपुट: bin[][] = {{1, 0, 0, 0},
                   {0, 1, 0, 1},
                   {0, 0, 0, 0},
                   {0, 0, 1, 0}}
आउटपुट: 3
द्वीप हैं: bin₀₀ - bin₁₁, bin₁₃, bin₃₂

हल का दृष्टिकोण

DFS का उपयोग करके समस्या को हल करने के लिए, हम मैट्रिक्स में एक संख्या के सभी पड़ोसियों (अधिकतम 8) का पता लगाने के लिए DFS तकनीक का उपयोग करेंगे और 1 की जांच करेंगे। यदि हम एक अपर्याप्त 1 मान का सामना करते हैं, तो हम इसे मानेंगे। हम मानों पर एक जांच रखेंगे जिनका दौरा किया गया है ताकि बार-बार दौरा न हो। ऐसा करके, हम मैट्रिक्स में मौजूद द्वीपों की संख्या गिन सकते हैं।

C++ कार्यान्वयन

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

#define ROW 5
#define COL 5

bool canVisit(int bin[][COL], int row, int col, bool visited[][COL]) {
    return (row >= 0) && (row < ROW) && (col >= 0) && (col < COL) 
           && (bin[row][col] && !visited[row][col]);
}

void DFS(int bin[][COL], int row, int col, bool visited[][COL]) {
    static int dr[] = {-1, -1, -1, 0, 0, 1, 1, 1};
    static int dc[] = {-1, 0, 1, -1, 1, -1, 0, 1};
    
    visited[row][col] = true;
    for (int k = 0; k < 8; ++k)
        if (canVisit(bin, row + dr[k], col + dc[k], visited))
            DFS(bin, row + dr[k], col + dc[k], visited);
}

int findIslandCount(int bin[][COL]) {
    bool visited[ROW][COL];
    memset(visited, 0, sizeof(visited));
    int islandCount = 0;
    
    for (int i = 0; i < ROW; ++i)
        for (int j = 0; j < COL; ++j)
            if (bin[i][j] && !visited[i][j]) {
                DFS(bin, i, j, visited);
                islandCount++;
            }
    return islandCount;
}

int main() {
    int bin[][COL] = {{1, 0, 0, 0},
                      {0, 1, 0, 1},
                      {0, 0, 0, 0},
                      {0, 0, 1, 0}};
    cout << "मैट्रिक्स में मौजूद द्वीपों की संख्या है " << findIslandCount(bin);
    return 0;
}

आउटपुट

मैट्रिक्स में मौजूद द्वीपों की संख्या है 4

जटिलता विश्लेषण

  • समय जटिलता: O(ROW × COL) - प्रत्येक सेल का एक बार दौरा किया जाता है
  • स्पेस जटिलता: O(ROW × COL) - विज़िटेड सरणी + पुनरावर्ती स्टैक

DFS बनाम डिस्जॉइंट सेट

पहलूDFSडिस्जॉइंट सेट
कार्यान्वयनसरलमध्यम
स्पेसO(NM) विज़िटेड + स्टैकO(NM) पैरेंट + रैंक
गतिशील अपडेटकठिनआसान (यूनियन ऑपरेशन)
  1. C++ का उपयोग करके पेंटागोनल पिरामिडल संख्या ज्ञात करना C++ का उपयोग करके पेंटागोनल पिरामिडल संख्या ज्ञात करना

    एक पेंटागोनल पिरामिडल संख्या पेंटागोनल बेस पिरामिड में वस्तुओं की संख्या के बराबर होती है। नीचे कुछ पेंटागोनल संख्याएं देखें। N तक पेंटागोनल संख्याओं का योग Nवीं पेंटागोनल पिरामिडल संख्या के बराबर होता है। इस लेख में, हम Nवीं पेंटागोनल पिरामिडल संख्या खोजने पर चर्चा करेंगे, उदाहरण के लिए: इनपुट:

  1. C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना

    इस लेख में, आप एक दी गई स्ट्रिंग में बनने वाले सबस्ट्रिंग्स (गैर-खाली) की संख्या निकालने के दृष्टिकोण के बारे में जानेंगे।इनपुट: string = moon आउटपुट: 10 व्याख्या: सबस्ट्रिंग्स हैं m, o, o, n, mo, oo, on, moo, oon और moon। इनपुट: string = yellow आउटपुट: 21समाधान खोजने का दृष्टिकोणमान लें स्ट्रिंग की

  1. C++ का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात करें C++ का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात करें

    बिंदु X और Y के बीच n संख्या में इंटरमीडिएट ट्रेन स्टेशन हैं। उन विभिन्न तरीकों की गणना करें जिनसे ट्रेनों को s स्टेशनों पर रुकने के लिए व्यवस्थित किया जा सकता है जैसे कि कोई दो स्टेशन एक-दूसरे के बगल में न हों। तो इस लेख में, हम स्टॉपिंग स्टेशनों की संख्या ज्ञात करने के लिए हर संभव दृष्टिकोण की व्य