Pagini recente » Cod sursa (job #2318234) | Cod sursa (job #2633925) | Monitorul de evaluare | Cod sursa (job #1205524) | Cod sursa (job #914541)
Cod sursa(job #914541)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <queue>
using namespace std;
int main (int argc, char const *argv[])
{
ifstream in ("dfs.in");
int n, m; in >> n >> m;
// vector < vector<int> > matAdi(n, vector<int>(n));
vector< vector<int> > liAd (n);
int x, y;
while (in >> x >> y) {
x--; y--;
liAd[x].push_back(y);
liAd[y].push_back(x);
}
in.close();
set<int> remaining;
for (int i = 0; i < n; i++) {
remaining.insert(i);
}
int nr = 0;
//
// for (int i = 0; i < n; i++)
// {
// cout << i << ": ";
// for (unsigned j = 0; j < liAd[i].size(); j++)
// cout << liAd[i][j] << ' ';
// cout << '\n';
// }
queue<int> bfs;
while (!remaining.empty()) {
bfs.push(*remaining.begin());
remaining.erase(remaining.begin());
while (!bfs.empty()) {
int nod = bfs.front();
bfs.pop();
for (unsigned i = 0; i < liAd[nod].size(); i++) {
if (remaining.find(liAd[nod][i]) != remaining.end()) {
bfs.push(liAd[nod][i]);
remaining.erase(liAd[nod][i]);
}
}
}
nr++;
}
ofstream out ("dfs.out");
out << nr << '\n';
out.close();
return 0;
}