Pagini recente » Cod sursa (job #1543277) | Cod sursa (job #3281046) | Cod sursa (job #3147984) | Cod sursa (job #2080693) | Cod sursa (job #1180208)
/// BFS
#include<fstream>
#include<vector>
#include<list>
#include<queue>
using namespace std;
int main() {
ifstream inStr("bfs.in");
ofstream outStr("bfs.out");
unsigned numNodes, numArcs, S;
inStr >> numNodes >> numArcs >> S; S--;
vector<list<unsigned> > adjList(numNodes);
unsigned from, to;
for(unsigned i=0; i<numArcs; i++) {
inStr >> from >> to;
adjList[from-1].push_back(to-1);
}
queue<unsigned> q;
vector<long> dist(numNodes, -1);
vector<bool> seen(numNodes, false);
list<unsigned>::iterator it;
dist[S]=0;
q.push(S);
while(!q.empty()) {
seen[q.front()]=true;
for(it=adjList[q.front()].begin(); it!=adjList[q.front()].end(); it++)
if(!seen[*it]) {
q.push(*it);
if(dist[q.front()]+1<dist[*it] || dist[*it]==-1)
dist[*it]=dist[q.front()]+1;
}
q.pop();
}
for(unsigned i=0; i<numNodes; i++)
outStr << dist[i] << ' ';
return 0;
}