Pagini recente » Cod sursa (job #1583491) | Cod sursa (job #254443) | Cod sursa (job #1111540) | Cod sursa (job #1581340) | Cod sursa (job #2783002)
#include <fstream>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
class graph{
int n,m;
vector<vector<int>> arcs;
public:
graph(int n,int m,vector< vector<int>> arcs);
void bfs(int start);
void dfs(int start);
};
graph::graph(int n,int m,vector< vector<int>> arcs)
{
this->n=n;
this->m=m;
this->arcs=arcs;
}
void graph::bfs(int start)
{
queue<int> que;
que.push(start);
int *dist=new int[this->n];
for(int i=0;i<n;i++)dist[i]=-1;//initializez distantele cu -1
dist[start]=0;//distanta startului e 0
while(!que.empty())//cat timp mai am in coada
{
int current=que.front();//iau elementul curent
que.pop();//il scot din coada
for(unsigned int i=0;i<arcs[current].size();i++)//ii parcurg lista de vecini
{
if(dist[arcs[current][i]]==-1)//daca vecinul e nevizitat
{
dist[arcs[current][i]]=dist[current]+1;//distanta lui devine cea a tatalui +1
que.push(arcs[current][i]);//il pun in coada
}
}
}
ofstream fout("bfs.out");
for(int i=0;i<this->n;i++)
fout<<dist[i]<<' ';//afisez distantele
delete[] dist;//sterg vectorul dinamic
}
int main()
{
int n,m,s;
ifstream fin("bfs.in");
fin>>n>>m>>s;
s--;
vector<vector<int>> arce(n);
int a,b;
for(int i=0;i<m;i++)
{
fin>>a>>b;
a--;b--;
arce[a].push_back(b);
}
graph g(n,m,arce);
g.bfs(s);
return 0;
}