Pagini recente » Cod sursa (job #1290181) | Cod sursa (job #614548) | Cod sursa (job #2448386) | Cod sursa (job #2858818) | Cod sursa (job #353913)
Cod sursa(job #353913)
#include <iostream>
#include <fstream>
using namespace std;
typedef struct un_nod
{ un_nod * urm;
int info;}
TNOD;
TNOD *v[100001];
long n,m,start,x,y,i;
long vizitat[100001],cost[100001];
void citire()
{ TNOD *p;
ifstream f("bfs.in");
f>>n>>m>>start;
// for(i=1;i<=n;i++) v[i]urm=NULL;
for(i=1;i<=m;i++)
{f>>x>>y;
p=new TNOD;
p->info=y;
p->urm=v[x];
v[x]=p;
}
f.close();
//am cam terminat in functia asta well done
}
void afisare()
{ofstream g("bfs.out");
for(i=1;i<=n;i++)
g<<cost[i]<<" ";
}
void bfs()
{TNOD *p;
int li,ls,c[100];
//initializam li,ls
li=1;ls=1;
//punem nodul de start
c[li]=start;
vizitat[start]=1;
//incepem parcurgerea bfs
while (li<=ls)
{//la inceput crestem costul nodurilor nevizitate
for(i=1;i<=n;i++) if (vizitat[i]==0) cost[i]++;
//vedem vecinii lui c[li] care sunt tinuti incepan cu adresa v[c[li]]
for(i=1;i<=n;i++)
{
p=v[c[li]];
while (p)
{if (vizitat[p->info]==0) {vizitat[p->info]=1;
ls++;
c[ls]=p->info;
}
p=p->urm;
}//while
}
li++;
}
for(i=1;i<=n;i++)
if (vizitat[i]==0) cost[i]=-1;
}
int main()
{
citire();
bfs();
afisare();
}