Pagini recente » Cod sursa (job #1980596) | Cod sursa (job #2316287) | Cod sursa (job #439912) | Cod sursa (job #1614153) | Cod sursa (job #1684346)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
#define MAXN 100005
vector < int >G[MAXN];
priority_queue< pair<int, int> > pq;
int M, N, S,cost=1;
int v[MAXN];
int dist[MAXN];
int main()
{
f>>N>>M>>S;
memset(dist, 0x3f, sizeof(dist));
dist[S] = 0;
for(int i=1; i<=M; i++)
{
int node1,node2;
f>>node1>>node2;
G[node1].push_back(node2);
}
pq.push(make_pair(0,S));
while(!pq.empty())
{
int node=pq.top().second;
pq.pop();
if(v[node]==1)
{
continue;
}
v[node]=1;
for (int i = 0; i < G[node].size(); ++i)
{
if (dist[G[node][i]] > dist[node] + 1)
{
dist[G[node][i]] = dist[node] + 1;
pq.push(make_pair(-dist[G[node][i]], G[node][i]));
}
}
}
for(int i=1; i<=N; i++)
{
if(dist[i]>N)
dist[i]=-1;
}
for(int i=1; i<=N; i++)
{
g<<dist[i]<<" ";
}
}