Pagini recente » Cod sursa (job #2158972) | Cod sursa (job #2035729) | Cod sursa (job #668445) | Cod sursa (job #129705) | Cod sursa (job #2797866)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
ifstream fin("dfs.in");
ofstream gout("dfs.out");
class Graf
{
int nrNoduri;
int nrMuchii;
int start;
vector <int> adj[100001];
public:
void citire_orientat();
void BFS();
void citire_neorientat();
void DFS();
void DFS_helper(int, vector <bool>&);
};
void Graf::citire_orientat()
{
int first, second;
f>>nrNoduri;
f>>nrMuchii;
f>>start;
for(int i = 0; i < nrMuchii; i++)
{
f>>first>>second;
adj[first].push_back(second);
}
}
void Graf::citire_neorientat()
{
int first, second;
fin>>nrNoduri>>nrMuchii;
for(int i = 0; i < nrMuchii; i++)
{
fin>>first>>second;
adj[first].push_back(second);
adj[second].push_back(first);
}
}
void Graf::BFS()
{
queue <int> coada;
coada.push(start);
bool visited[100001] = {};
visited[start] = 1;
int cost[100001] = {};
cost[start] = 0;
int nodCrt;
while (coada.size())
{
nodCrt = coada.front();
for(int i = 0; i < adj[nodCrt].size(); i++)
{
if(!visited[adj[nodCrt][i]])
{
coada.push(adj[nodCrt][i]);
cost[adj[nodCrt][i]] = cost[nodCrt] + 1;
visited[adj[nodCrt][i]] = 1;
}
}
coada.pop();
}
for(int i = 1; i <= nrNoduri; i++)
{
if(visited[i] == 1)
g<<cost[i]<<" ";
else
g<<"-1 ";
}
}
void Graf::DFS()
{
vector <bool> visited(100);
int nrCompConexe = 0;
for (int i = 1; i <= nrNoduri; i++)
{
if(!visited[i])
{
DFS_helper(i, visited);
nrCompConexe += 1;
}
}
gout<<nrCompConexe;
}
void Graf::DFS_helper(int s, vector<bool>& visited)
{
visited[s] = 1;
for (int i = 0; i < adj[s].size(); i++)
{
if(!visited[adj[s][i]])
DFS_helper(adj[s][i], visited);
}
}
int main()
{
Graf G;
//G.citire_orientat();
//G.BFS();
G.citire_neorientat();
G.DFS();
return 0;
}