Pagini recente » Cod sursa (job #1686699) | Cod sursa (job #2905835) | Cod sursa (job #553770) | Cod sursa (job #1703997) | Cod sursa (job #1424291)
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
vector <vector<int>> graf;
int nrNoduri, nrMuchii;
void afisareGraf(){
int i, j;
cout << "\n"<<nrNoduri<<" "<<nrMuchii<<"\n";
for (i = 1; i < graf.size(); i++){
cout << " Nodul " << i << " are vecinii: ";
for (j = 0; j < graf[i].size(); j++){
cout << graf[i][j] << " ";
}
cout << "\n";
}
}
void citire(){
int n, x, y;
fstream f("darb.in");
f >> nrNoduri;
nrMuchii = 0;
n = nrNoduri;
while (n--){
graf.push_back(*(new vector<int>));
}
graf.push_back(*(new vector<int>));
while (!f.eof()){
f >> x >> y;
cout << x << " " << y << "\n";
graf[x].push_back(y);
graf[y].push_back(x);
nrMuchii++;
}
f.close();
}
bool magie(){
if (nrNoduri - 1 != nrMuchii){
cout << "Nu e un arbore!";
return false;
}
else{
int vazut[100];
for (int i = 0; i <= nrNoduri; i++){
vazut[i] = 0;
}
int parinte[100];
int coada[100];
int p, u;
int a, b;
p = 0; u = 0;
coada[u] = 1;
u++;
vazut[1] = 1;
parinte[1] = 0;
while (p < u){
int x = coada[p];
cout << x <<" ";
p++;
for (int i = 0; i < graf[x].size(); i++){
if (vazut[graf[x][i]] && graf[x][i]!=parinte[x]){
cout << "Graficul nu este arbore!";
return false;
}
else if(graf[x][i]!=parinte[x]){
vazut[graf[x][i]] = 1;
parinte[graf[x][i]] = x;
coada[u] = graf[x][i];
u++;
}
}
}
for (int i = 1; i <= nrNoduri; i++){
if (vazut[i] == 0){
cout << "GRAFICUL NU E CONEX";
return false;
}
}
for (int i = 0; i <= nrNoduri; i++){
vazut[i] = 0;
}
a = coada[u - 1];
p = 0;
coada[p] = coada[u - 1];
u = 1;
parinte[coada[p]] = 0;
int k = 0,q = 0;
cout << "\n";
while (p < u){
int x = coada[p];
cout << x << " ";
k = vazut[x];
p++;
for (int i = 0; i < graf[x].size(); i++){
if (graf[x][i] != parinte[x]){
parinte[graf[x][i]] = x;
coada[u] = graf[x][i];
vazut[graf[x][i]] = k + 1;
u++;
}
}
}
b = coada[u - 1];
k = vazut[b];
cout << "\nCentrul are numarul " << k<<"\n";
for (int i = 1; i <= nrNoduri; i++){
if (k % 2 != 0){
if (vazut[i] == k / 2 || vazut[i] == k / 2 + 1)
cout << "Nodul " << i << " apartine centrului\n";
}
else
if (vazut[i] == k/2)
cout << "Nodul " << i << " apartine centrului\n";
}
fstream f("darb.out");
f << k + 1;
f.close();
}
return true;
}
int main(){
citire();
magie();
cout << "\n";
}