Pagini recente » Cod sursa (job #1039087) | Cod sursa (job #491943) | Cod sursa (job #1369934) | Cod sursa (job #1575852) | Cod sursa (job #1962084)
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define VMAX 100001
std::vector<int> edges[VMAX];
int dist[VMAX];
int check[VMAX];
void bfs(int src)
{
std::queue<int> q;
q.push(src);
check[src] = 1;
while (!q.empty()) {
int aux = q.front();
check[aux] = 1;
q.pop();
std::vector<int>::iterator it;
for(it = edges[aux].begin(); it != edges[aux].end(); it++) {
if ( check[*it] == 0 ) {
dist[*it] = dist[aux] + 1;
q.push(*it);
check[*it] = 1;
}
}
}
}
int main()
{
int V, E, src;
int v1, v2;
int i, j;
FILE *f = fopen("bfs.in", "r");
fscanf(f, "%d", &V);
fscanf(f, "%d", &E);
fscanf(f, "%d", &src);
for (i = 0; i < E; i++) {
fscanf(f, "%d", &v1);
fscanf(f, "%d", &v2);
edges[v1].push_back(v2);
}
fclose(f);
for (i = 1; i <= V; i++) {
if (i != src)
dist[i] = -1;
else
dist[i] = 0;
}
bfs(src);
FILE *fout = fopen("bfs.out", "w");
for (i = 1; i <= V; i++) {
fprintf(fout, "%d ", dist[i]);
}
fclose(fout);
}