Pagini recente » Cod sursa (job #1216226) | Cod sursa (job #2944159) | Cod sursa (job #82035) | Cod sursa (job #1920828) | Cod sursa (job #2379866)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
class Graph
{
int n;
vector<vector<int>> adj;
public:
void set_n(int n)
{
this->n = n;
}
Graph(int n);
void muchie(int nod1, int nod2);
void BFS(int nod, bool visited[]);
};
Graph::Graph(int n)
{
adj = vector<vector<int>>(n+1);
}
void Graph::muchie(int nod1, int nod2)
{
adj[nod1].push_back(nod2);
}
void Graph::BFS(int nod, bool visited[])
{
vector<int> dist(n+1, n+1);
queue<int> C;
visited[nod] = true;
dist[nod] = 0;
C.push(nod);
while(!C.empty())
{
int curr_nod = C.front();
C.pop();
for(auto k : adj[curr_nod])
if(visited[k] == false)
{
C.push(k);
visited[k] = true;
dist[k] = dist[curr_nod]+1;
}
}
ofstream fout("bfs.out");
for(int i = 1; i <=n; i++)
if(dist[i] != n+1)
fout << dist[i] << " ";
else
fout << -1 << " ";
fout.close();
}
int main()
{
ifstream fin("bfs.in");
int n, m, sursa;
fin >> n >> m >> sursa;
Graph g(n);
g.set_n(n);
for(int i = 0; i < m; i++)
{
int x, y;
fin >> x >> y;
g.muchie(x, y);
}
fin.close();
bool *visited;
visited = new bool[n+1];
for(int i = 0; i <= n; i++)
visited[i] = false;
g.BFS(sursa, visited);
return 0;
}