Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// generator graf neorientat cu n componente conexe
- #include <iostream>
- #include <vector>
- #include <stdlib.h> /* srand, rand */
- #include <time.h> /* time */
- #include <fstream>
- using namespace std;
- int muchii[600002];
- int nr_muchii = 0;
- ofstream fout("graf.txt");
- struct nod {
- int cc; /// din ce componenta conexa face parte
- vector<int> vecini; /// indicii nodurilor vecine
- };
- nod noduri[200001];
- int fr[200001];
- void adaugaVecin(int a, int b){
- noduri[a].vecini.push_back(b);
- }
- void refaDFS(int a, int newValForCC){
- if (noduri[a].cc==newValForCC) return; /// deja l-am vizitat si probabil ca sunt intr-o bucla
- noduri[a].cc = newValForCC;
- for(int i=0; i<noduri[a].vecini.size(); i++)
- refaDFS(noduri[a].vecini[i], newValForCC);
- }
- int vecini(int x, int y){
- for(int i=0; i<noduri[x].vecini.size(); i++)
- if (y==noduri[x].vecini[i]) return 1;
- return 0;
- }
- int main()
- {
- int n,m,cx;
- int bn, bm, bcx;
- cout << "Introduceti numarul de noduri: ";
- cin >> n;
- cout << "Introduceti numarul de muchii:";
- cin >> m;
- cout << "Introduceti numarul de componente conexe:";
- cin >> cx;
- bn=n,bm=m,bcx=cx;
- srand (time(NULL));
- int muchii_in_plus=0;
- for(int i=1; i<=n; i++)
- noduri[i].cc=i;
- int conexe = n;
- while (conexe>cx)
- {
- int x = rand() % n + 1;
- int y = rand() % n + 1;
- if (noduri[x].cc!=noduri[y].cc)
- {
- adaugaVecin(x,y);
- adaugaVecin(y,x);
- if (noduri[x].cc < noduri[y].cc) refaDFS(noduri[y].cc, noduri[x].cc);
- if (noduri[x].cc > noduri[y].cc) refaDFS(noduri[x].cc, noduri[y].cc);
- conexe--;
- m--;
- muchii[nr_muchii] = x;
- muchii[nr_muchii+1] = y;
- nr_muchii+=2;
- }
- }
- while(m)
- {
- int x = rand() % n + 1;
- int y = rand() % n + 1;
- if (x==y) continue;
- if (noduri[x].cc==noduri[y].cc){
- m--;
- muchii[nr_muchii] = x;
- muchii[nr_muchii+1] = y;
- nr_muchii+=2;
- }
- }
- fout << n << ' ' << bm << '\n';
- for(int i=0; i<nr_muchii; i+=2)
- {
- if (muchii[i]<muchii[i+1]) fout << muchii[i] << ' ' << muchii[i+1] << '\n';
- else fout << muchii[i+1] << ' ' << muchii[i] << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement