Pagini recente » Rating Bratu Iulian (lulius) | Cod sursa (job #2515755) | Cod sursa (job #1650825) | Cod sursa (job #1152692) | Cod sursa (job #2795809)
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
class Graf
{
private:
int nr_noduri;
int nr_muchii;
vector<vector<int>> lista;
public:
Graf(){}
void citire_graf_dfs() {
ifstream f("dfs.in");
int x, y;
f >> nr_noduri;
f >> nr_muchii;
lista.resize(get_nr_noduri() + 1);
vector <int> init, fin;
while (f >> x >> y) {
lista[x].push_back(y);
lista[y].push_back(x);
}
f.close();
}
void afisare_lista_adiacenta() {
for (int i = 1; i <= get_nr_noduri(); i++) {
cout << lista[i].size();
}
}
void citire_graf_bfs() {
int start;
ifstream f("bfs.in");
int x, y;
f >> nr_noduri;
f >> nr_muchii;
f >> start;
lista.resize(get_nr_noduri() + 1);
while (f >> x >> y) {
lista[x].push_back(y);
}
}
int get_nr_noduri() { return nr_noduri; }
void set_nr_noduri(int n) { nr_noduri = n; }
int get_nr_muchii() { return nr_muchii; }
void set_nr_muchii(int m) { nr_muchii = m; }
void bfs(int start) {
queue<int>coada;
int x;
vector<int> vizit;
for (int i = 0; i <= nr_noduri; i++) { vizit.push_back(-1); }
coada.push(start);
vizit[start] = 0;
while (!coada.empty()) {
x = coada.front();
coada.pop();
for (int i = 0; i < lista[x].size(); i++) {
if (vizit[lista[x][i]] == -1) {
coada.push(lista[x][i]);
vizit[lista[x][i]] = vizit[x] + 1;
}
}
}
ofstream g("bfs.out");
for (int i = 1; i <= nr_noduri; i++) {
g << vizit[i] << " ";
}
g.close();
}
void dfs(int start, vector<int>& vizit) {
int v;
stack<int>st;
int x;
st.push(start);
vizit[start] = 1;
while (!st.empty()) {
x = st.top();
v = 0;
for (int i = 0; i < lista[x].size(); i++) {
if (vizit[lista[x][i]] == 0) {
v = lista[x][i];
break;
}
}
if (v == 0) { st.pop(); }
else {
st.push(v);
vizit[v] = 1;
}
}
}
void comp_conexe() {
vector<int> vizit;
for (int i = 0; i <= nr_noduri ; i++) { vizit.push_back(0); }
int count = 0;
for (int i = 1; i <= nr_noduri ; i++) {
if (vizit[i] == 0) {
dfs(i, vizit);
count++;
}
}
ofstream g("dfs.out");
g << count;
g.close();
}
void citire_ST() {
ifstream f("sortaret.in");
int x, y;
f >> nr_noduri;
f >> nr_muchii;
f.close();
}
};
int main() {
Graf* g = new Graf;
g->citire_graf_dfs();
g->comp_conexe();
return 0;
}