Pagini recente » Cod sursa (job #119986) | Cod sursa (job #816910) | Cod sursa (job #1500462) | Cod sursa (job #119987) | Cod sursa (job #904611)
Cod sursa(job #904611)
//Parcurgere_in_latime
#include<fstream>
#include<vector>//biblioteca ce contine vectorul de vectori variabili vec
#define MAX 100001
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int ap[MAX],nod[MAX],cost[MAX];//nod-coada de noduri; ap-1 daca nodul a fost vizitat sau nu;
//cost-distanta dintre fiecare nod si nod plecare;
vector <int> vec [MAX];
void BF(int nodPlec){
memset(cost,-1,sizeof(cost));
int lungNod=1;//lungNod=lungimea vectorului nod
nod[lungNod]=nodPlec;
ap[nodPlec]=1;
cost[nodPlec]++;
for(int j=1; j<=lungNod;j++)
for(int i=0; i<vec[nod[j]].size();i++){
int nodver=vec[nod[j]][i];//nodver=nodul de verificat-!!pentru usurarea scrierii
if(!ap[nodver]){
ap[nodver]=1;
lungNod++;
nod[lungNod]=nodver;
cost[nodver]=cost[nod[j]]+1;
}
}
}
int main(){
//cites n=nr moduri, m=nr arce, s=nod plecare
int n,m,s;
f>>n>>m>>s;
//transforma arcele date in vectorul de adiacenta continuta in vec
int i,j;
while(m){
m--;
f>>i>>j;
vec[i].push_back(j);
}
BF(s);
for(int i=1;i<=n;i++)
g<<cost[i]<<" ";
}