Pagini recente » Cod sursa (job #1369560) | Cod sursa (job #3178489) | Cod sursa (job #1143066) | Cod sursa (job #2973399) | Cod sursa (job #1564871)
#include <cstdio>
#include <vector>
#include <deque>
#include <bitset>
using namespace std;
FILE * iFile;
FILE * oFile;
int nodes, edges, nodeS;
int distance_custom[100002];
bitset<100002> visited;
vector <int> vertices[100002];
deque <int> que;
void read()
{
int i, source, destination;
fscanf(iFile, "%d %d %d", &nodes, &edges, &nodeS);
for(i = 1; i <= edges; i++)
{
fscanf(iFile, "%d %d", &source, &destination);
vertices[source].push_back(destination);
}
}
void bfs(int start_node)
{
int dist = 1, curr=0;
que.push_back(start_node);
distance_custom[start_node] = dist;
while(que.size() > 0)
{
start_node = que.front();
que.pop_front();
visited[start_node] = 1;
for(int i = 0; i < vertices[start_node].size(); i++)
{
if(visited[vertices[start_node][i]] == 0) {
distance_custom[vertices[start_node][i]] = distance_custom[start_node] + 1;
visited[vertices[start_node][i]] = 1;
que.push_back(vertices[start_node][i]);
}
}
}
}
int main()
{
iFile = fopen("bfs.in", "r");
oFile = fopen("bfs.out", "w");
read();
bfs(nodeS);
for(int i=1;i <= nodes; i++)
fprintf(oFile, "%d ", distance_custom[i]-1);
return 0;
}