Pagini recente » Cod sursa (job #2259794) | Cod sursa (job #1983136) | Cod sursa (job #2102377) | Cod sursa (job #57736) | Cod sursa (job #2276793)
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,s,a[10010][10010];
#define infinit 100
int d[100010];
void citire()
{ f>>n>>m>>s; int x=0,y=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j) a[i][j]=infinit;
while(m)
{ f>>x>>y; a[x][y]=1;
m--;
}
}
void afis()
{ for(int i=1;i<=n;++i)
{ for(int j=1;j<=n;++j) g<<a[i][j]<<" ";
g<<'\n';
}
}
void Bellman_Ford(int s)
{ int ok=0;
for(int i=1;i<=n;++i) d[i]=infinit;
d[s]=0;
for(int i=1;i<=n;++i)
{ ok=0;
for(int j=1;j<=n;++j)
for(int k=1;k<=n;++k)
if( d[j] != infinit and a[j][k] != infinit )
if( d[k] > d[j] + a[j][k] )
{ d[k] = d[j] + a[j][k];
ok=1;
}
}
}
int main()
{ citire();
Bellman_Ford(s);
for(int i=1;i<=n;++i)
if( d[i] == infinit ) g<<-1<<" ";
else g<<d[i]<<" ";
g.close();
return 0;
}