Pagini recente » Cod sursa (job #1710775) | Cod sursa (job #2534315) | Cod sursa (job #1875001) | Cod sursa (job #2571846) | Cod sursa (job #2423636)
#include <iostream>
#include <queue>
#include <fstream>
#include <vector>
int N,M,S,viz[100001];
using namespace std;
void citire(char*nume_f,vector<vector<int>> &g)
{
ifstream fin(nume_f);
int x,y;
int N, M, S; fin >> N >> M >> S;
for(int i=1;i<=N;i++)
viz[i]=N;
for(int i=1;i<=M;i++)
{
fin>>x>>y;
g[x].push_back(y);
}
fin.close();
}
void bfs(int x,int N,vector<vector<int>>g)
{
queue<int>c;
c.push(x);
viz[x]=0;
while(!c.empty())
{
int y=c.front();
cerr << y << "\n";
c.pop();
for(int i=0;i<g[y].size();i++) {
if(viz[g[y][i]]>viz[y]+1)
{
viz[g[y][i]]=viz[y]+1;
c.push(g[y][i]);
}
}
}
}
void afis(char*nume_f,int N)
{
ofstream fout(nume_f);
for(int i=1;i<=N;i++)
{
if(viz[i]==N)
fout<<"-1 ";
else fout<<viz[i]<<" ";
}
fout.close();
}
int main()
{
ifstream fin("bfs.in");
fin>>N>>M>>S;
vector<vector<int>>g;
g = vector<vector<int>> (N + 1);
citire("bfs.in",g);
bfs(S,N,g);
afis("bfs.out",N);
fin.close();
return 0;
}