Pagini recente » Cod sursa (job #2724745) | Cod sursa (job #1401456) | Cod sursa (job #3239778) | Cod sursa (job #866411) | Cod sursa (job #172219)
Cod sursa(job #172219)
//Acest cod a fost pus sa fie testat ca sa vada tehstick, k ? xD
#include <cstdio>
#include <bitset>
#include <algorithm>
#include <utility>
#include <vector>
#include <exception>
#include <stdexcept>
using namespace std;
const int MAX_NR_PORTURI = 100;
int main (void)
{
freopen("dfs.in", "r", stdin);
freopen("dfs.out", "w+", stdout);
int nrPorturi;
vector< pair<int,int> > muchii;
int nrMuchii; // never used.
scanf("%d %d", &nrPorturi, &nrMuchii);
int port1,port2;
while ( scanf("%d %d", &port1, &port2) == 2) {
if (port1>port2) swap(port1,port2);
muchii.push_back( make_pair(port1-1, port2-1) );
}
vector<int> parcurgere_laterala;
vector<int> clubApartenent(nrPorturi);
parcurgere_laterala.push_back(0);
int pozNodInParcurgere, clubCurent=0;
do {
++clubCurent;
pozNodInParcurgere = 0;
while (pozNodInParcurgere < parcurgere_laterala.size()) {
int nod = parcurgere_laterala[pozNodInParcurgere];
/* NOTA IMPORTANTA:
DACA PUNEAM const int &nod = blabla
NU AR FI FUNCTIONAT, DEOARECE REFERINTA S-AR FI INVALIDAT LA .push_back()
*/
clubApartenent[nod] = clubCurent;
for (vector<pair<int,int> >::const_iterator iter = muchii.begin(); iter != muchii.end();
++iter)
if (iter->first == nod || iter->second == nod) {
int nodAdiacent = iter->first==nod ? iter->second : iter->first;
if (find(parcurgere_laterala.begin(), parcurgere_laterala.end(), nodAdiacent) ==
parcurgere_laterala.end())
parcurgere_laterala.push_back(nodAdiacent);
}
++pozNodInParcurgere;
}
parcurgere_laterala.clear();
int nodNeparcurs;
for (nodNeparcurs=1; nodNeparcurs<nrPorturi && clubApartenent[nodNeparcurs]; ++nodNeparcurs);
if (nodNeparcurs < nrPorturi) parcurgere_laterala.push_back(nodNeparcurs);
else break;
} while (1);
printf("%d\n", clubCurent);
for (int nrClub=1; nrClub <= clubCurent; ++nrClub) {
for (int j=0; j<clubApartenent.size(); ++j)
if (clubApartenent[j]==nrClub) printf("%d ", j+1);
printf("\n");
}
return 0;
}