Pagini recente » Cod sursa (job #1759235) | Cod sursa (job #1914701) | Cod sursa (job #2063820) | Cod sursa (job #3251556) | Cod sursa (job #2586587)
#include <fstream>
#include <vector>
#define NMAX 100000
#define MMAX 1000000
using namespace std;
int coada[MMAX];
vector<int> graf[NMAX];
int distante[NMAX];
void citesteGraf(string fisierIntrare, int & n, int & sursa)
{
ifstream fin(fisierIntrare);
int m;
fin >> n >> m >> sursa;
sursa--;
int x, y;
for (int i = 0; i < m; i++)
{
fin >> x >> y;
x--;
y--;
graf[x].push_back(y);
}
fin.close();
}
void bfs(int n, int sursa)
{
int i, st = 0, lungime = 1;
for (i = 0; i < n; i++)
distante[i] = -1;
distante[sursa] = 0;
coada[0] = sursa;
int s;
while (st < lungime)
{
s = coada[st];
st++;
for (i = 0; i < graf[s].size(); i++)
if (distante[graf[s][i]] < 0)
{
distante[graf[s][i]] = distante[s] + 1;
coada[lungime] = graf[s][i];
lungime++;
}
}
}
void scrieDistante(string fisierIesire, int n)
{
ofstream fout(fisierIesire);
for (int i = 0; i < n; i++)
fout << distante[i] << " ";
fout.close();
}
int main()
{
int n, sursa;
citesteGraf("bfs.in", n, sursa);
bfs(n, sursa);
scrieDistante("bfs.out", n);
return 0;
}