Pagini recente » Cod sursa (job #2844217) | Cod sursa (job #2555846) | Cod sursa (job #2700529) | Cod sursa (job #508907) | Cod sursa (job #3249218)
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
int n, m;
struct element
{
list <int> elemente;
}el[100001];
void afisare(int v[101][101],int varfuri)
{
for (int i = 1; i <= varfuri; i++)
{
for (int j = 1; j <= varfuri; j++)
std::cout << v[i][j];
std::cout << '\n';
}
}
void memorare(int v[101][101],int ordonat)
{
//int n, m;
//in >> n >> m;
int x1, x2;
//std::cout << n << ' ' << m;
for (int i = 1; i <= m; i++)
{
in >> x1 >> x2;
v[x1][x2] = 1;
if (ordonat == 0)
v[x2][x1] = 1;
}
}
void memorare2(element el[], int ordonat)
{
int x1, x2;
for (int i = 1; i <= m; i++)
{
in >> x1 >> x2;
el[x1].elemente.push_back(x2);
if (ordonat == 0)
el[x2].elemente.push_back(x1);
}
};
void afisare2(element el[], int varfuri)
{
for (int i = 1; i <= varfuri; i++)
{
std::cout << "Nodul " << i << " este adiacent cu: " << '\n';
for (auto it = el[i].elemente.begin(); it != el[i].elemente.end(); it++)
std::cout << *it<<' ';
std::cout << '\n';
}
}
void ListaToMatrice(element el[], int v[101][101],int varfuri)
{
for (int i = 1; i <= varfuri; i++)
{
for (auto it = el[i].elemente.begin(); it != el[i].elemente.end(); it++)
{
v[i][*it] = 1;
}
}
}
void MatriceToLista(element el[], int v[101][101], int varfuri)
{
for(int i=1;i<=varfuri;i++)
for (int j = 1; j <= varfuri; j++)
{
if (v[i][j] == 1)
el[i].elemente.push_back(j);
}
};
int BFS(element el[], bool parcurse[],int current, int ideal, int n, int pas)
{
parcurse[current] = 1;
if (current == ideal)
{
//std::cout << "!";
return pas;
}
int minim = 8888;
for (auto t = el[current].elemente.begin(); t != el[current].elemente.end(); t++)
{
if (parcurse[*t] != 1)
{
//std::cout << *t;
minim = std::min(minim, BFS(el, parcurse, *t, ideal, n, pas + 1));
//parcurse[*t] = 0;
}
}
return minim;
};
int main()
{
//int n, m;
int nod;
in >> n >> m>>nod;
memorare2(el, 1);
//ListaToMatrice(el, v, n);
//afisare2(el, n);
bool parcurse[100005] = { 0 };
for (int i = 1; i <= n; i++)
{
int val = BFS(el, parcurse, nod, i, n, 0);
//int val = 1;
if (val == 8888)
out << -1 << ' ';
else
out << val<<" ";
for (int i = 1; i <= n; i++)
parcurse[i] = 0;
}
return 0;
}