Pagini recente » Cod sursa (job #1769328) | Cod sursa (job #3191273) | Cod sursa (job #3171488) | Cod sursa (job #1061557) | Cod sursa (job #193124)
Cod sursa(job #193124)
#include <vector>
#include <cstdio>
int main (void)
{
std::vector<std::vector<unsigned int> > graf;
freopen("dfs.in", "r", stdin);
freopen("dfs.out", "w+", stdout);
unsigned int nrNoduri, nrMuchii, componente=0;
scanf("%u %u\n", &nrNoduri, &nrMuchii);
graf.resize(nrNoduri);
for (unsigned int muchie=0; muchie<nrMuchii; ++muchie) {
unsigned int src, dest;
scanf("%u %u\n", &src, &dest);
--src; --dest;
graf[src].push_back(dest);
graf[dest].push_back(src);
}
unsigned int *Q = new unsigned int[nrNoduri], *Q_push, *Q_pop;
std::vector<char> used; used.resize(nrNoduri*10);
unsigned int nod=0;
do {
Q_push = Q_pop = Q;
*(Q_push++) = nod;
used[nod] = 1;
while (Q_push > Q_pop) {
unsigned int crt = *(Q_pop++);
printf(":: %u\n",crt); fflush(stdout);
//used[crt]=1;
for (std::vector<unsigned int>::const_iterator iter = graf[crt].begin();
iter != graf[crt].end(); ++iter)
if (!used[*iter]) {
*(Q_push++) = *iter;
used[crt] = 1;
printf("push: %u\n", *iter); fflush(stdin);
}
}
for (++nod; nod<nrNoduri && used[nod]; ++nod);
++componente;
} while (nod < nrNoduri);
printf("%u\n", componente);
delete [] Q;
fclose(stdin);
fclose(stdout);
return 0;
}