Pagini recente » Borderou de evaluare (job #1993669) | Cod sursa (job #873272) | Cod sursa (job #978515) | Cod sursa (job #2327017) | Cod sursa (job #2229994)
#include <bits/stdc++.h>
#define MaximumNodes 100005
std::ifstream InFile("dfs.in");
std::ofstream OutFile("dfs.out");
int N, M, S;
// Assuming no data duplicates
std::vector <int> Adj[MaximumNodes];
int NArcs[MaximumNodes];
bool Seen[MaximumNodes];
std::queue <int> BFSQueue;
void BFS(int StartingIndex) {
BFSQueue.push(StartingIndex);
Seen[StartingIndex] = 1;
NArcs[StartingIndex] = 0;
int Index, Cost;
while(!BFSQueue.empty()) {
Index = BFSQueue.front();
BFSQueue.pop();
Cost = NArcs[Index];
for (auto Node : Adj[Index]) {
if(Seen[Node]);
else {
BFSQueue.push(Node);
Seen[Node] = 1;
NArcs[Node] = Cost + 1;
}
}
}
}
void InitialiseData() {
for (int i=0; i<N; i++)
NArcs[i] = -1;
}
void Citire() {
InFile >> N >> M >> S;
for (int i=0, x, y; i<M; i++) {
InFile >> x >> y;
// Because I can
Adj[x].push_back(y);
}
}
void Rezolvare() {
InitialiseData();
BFS(S);
for (int i=0; i<N; i++)
OutFile << NArcs[i+1] << " ";
}
int main()
{
Citire();
Rezolvare();
return 0;
}