Pagini recente » Cod sursa (job #3183964) | Cod sursa (job #456515) | Cod sursa (job #2200292) | Cod sursa (job #220903) | Cod sursa (job #697453)
Cod sursa(job #697453)
#include<cstdio>
#include<vector>
#include<queue>
#define _NMAX 100010
#define _MMAX 1000010
using namespace std;
int nN, nM;
vector<int > lAd[_NMAX];
int dist[_NMAX];
void bfs(int);
int main()
{
FILE *fin = fopen ("bfs.in", "r");
int source;
fscanf(fin, "%d %d %d", &nN,&nM,&source);
for (int i=1; i<=nM; i++)
{
int nod1, nod2;
fscanf (fin, "%d %d", &nod1, &nod2);
lAd[nod1].push_back(nod2);
}
bfs(source); //dist[]
FILE *fout = fopen ("bfs.out", "w");
for (int i=1;i<=nN;i++)
fprintf(fout, "%d ", dist[i]);
return 0;
}
bool in_q[_NMAX];
void bfs(int source)
{
for (int i=1;i<=nN;i++) dist[i]=-1;
dist[source]=0;
queue<int > q;
q.push(source); in_q[source]=1;
while (!q.empty())
{
int cur=q.front(); q.pop();
for (int i=0;i<lAd[cur].size();i++)
{
int veccur=lAd[cur].at(i);
if (in_q[veccur]) continue;
dist[veccur]=dist[cur]+1;
q.push(veccur);
in_q[veccur]=1;
}
}
}