Pagini recente » Cod sursa (job #1487511) | Cod sursa (job #3138480) | Cod sursa (job #2884291) | Cod sursa (job #3265343) | Cod sursa (job #2981047)
#include<bits/stdc++.h>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
struct node{
bool vizitat=0;
int dist=10000000, n=0;
vector<int>vec;
};
void bfs(vector<node> &G, int curr){
G[curr].vizitat=1;
for(int i=0;i<G[curr].n;i++){
// out<<G[curr].vec[i]+1<<" "<<G[G[curr].vec[i]].dist<<" -> ";
if(G[G[curr].vec[i]].dist>G[curr].dist+1){
G[G[curr].vec[i]].dist=G[curr].dist+1;
// out<<G[G[curr].vec[i]].dist<<"\n";
bfs(G, G[curr].vec[i]);
}
else{
// out<<G[G[curr].vec[i]].dist<<"\n";
}
if(!G[G[curr].vec[i]].vizitat){
bfs(G, G[curr].vec[i]);
}
}
}
int main(){
int n, m, s;
int a,b;
in>>n>>m>>s;
vector<node>G(n);
for(int i=0;i<m;i++){
in>>a>>b;
G[a-1].vec.push_back(b-1);
G[a-1].n++;
}
G[s-1].dist=0;
bfs(G, s-1);
for(int i=0;i<n;i++){
if(G[i].vizitat){
out<<G[i].dist<<" ";
}
else out<<-1<<" ";
}
}