خانه ویکی

پیدا کردن مولفه های همبندی در گراف

یک گراف بدون جهت با n راس و m یال داریم و وظیفه ما پیدا کردن مولفه های همبندی این گراف است. در گراف های بدون جهت ۲ راس متعلق به یک مولفه همبندی هستند اگر و تنها اگر یک مسیر بین آن ها با استفاده از یال های این گراف باشد و هیچ مسیری هم بین دو مولفه همبندی متفاوت وجود ندارد. این مساله در گراف جهت دار را مولفه های قویا همبند می گویند که می توانید توضیح آن را در بخش بعدی بخوانید.

int n;
vector<int> g[MAXN] ;
bool used[MAXN] ;
vector<int> comp ;

void dfs(int v) {
    used[v] = true ;
    comp.push_back(v);
    for (size_t i = 0; i < (int) g[v].size(); ++i) {
        int to = g[v][i];
        if (!used[to])
            dfs(to);
    }
}

void find_comps() {
    for (int i = 0; i < n ; ++i)
        used [i] = false;
    for (int i = 0; i < n ; ++i)
        if (!used[i]) {
            comp.clear();
            dfs(i);
            cout << "Component:" ;
            for (size_t j = 0; j < comp.size(); ++j)
                cout << ' ' << comp[j];
            cout << endl ;
        }
}

Practice Problems