Pagini recente » Cod sursa (job #1325645) | Cod sursa (job #1656188) | Cod sursa (job #487429) | Cod sursa (job #1464313) | Cod sursa (job #1206838)
#include<stdio.h>
#include<vector>
#include<queue>
#define NMAX 100005
using namespace std;
FILE *in, *out;
int N, M, S;
vector<int> ADJACENCY[NMAX];
queue<int> QUEUE;
bool VISITED[NMAX];
int COST[NMAX];
void openFile(){
in = fopen("bfs.in","rt");
out = fopen("bfs.out", "wt");
}
void readFile(){
fscanf(in, "%d %d %d", &N, &M, &S);
while (M--){
int x, y;
fscanf(in, "%d %d", &x, &y);
ADJACENCY[x].push_back(y);
}
}
void initCost(){
for (int i = 0; i < NMAX - 2; i++){
COST[i] = NMAX;
}
}
void bfs(){
initCost();
QUEUE.push(S);
VISITED[S] = 1;
COST[S] = 0;
while (QUEUE.size())
{
int node = QUEUE.front();
int adjacencySize = ADJACENCY[node].size();
for (int i = 0; i < adjacencySize; i++)
{
int neighbour = ADJACENCY[node][i];
if (!VISITED[neighbour]){
QUEUE.push(neighbour);
VISITED[neighbour] = 1;
COST[neighbour] = COST[node] + 1;
}
}
QUEUE.pop();
}
}
void writeResults(){
for (int i = 1; i <= N; i++)
if (COST[i] == NMAX)
fprintf(out, "%d ", -1);
else
fprintf(out, "%d ", COST[i]);
}
int main(){
openFile();
readFile();
bfs();
writeResults();
return 0;
}