Vous êtes sur la page 1sur 2

BFS

#include <iostream>
using namespace std;
const int max_n = 10000;
int lista_sosedstvo[max_n][max_n];
int lista_sosedstvo_dolzina[max_n] = {0};
int n;
void dodaj_granka(int a, int b)
{
lista_sosedstvo[a][lista_sosedstvo_dolzina[a]] = b;
++lista_sosedstvo_dolzina[a];
lista_sosedstvo[b][lista_sosedstvo_dolzina[b]] = a;
++lista_sosedstvo_dolzina[b];
}
int najkratka_ruta(int pocetok, int kraj)
{
//Niz u kojem su upisane oznake vorova za BFS pretragu int
int oznaka[max_n];
//Inicijalno svi vorovi imaju oznaku -1, tj. nisu oznaeni
for (int i =0; i < n; ++i)
oznaka[i] = -1;
//vor od kojeg se poinje BFS pretraga ima oznaku 0
oznaka[pocetok] = 0;
//Varijabla za oznaku koja se trenutno obrauje
int momentalna_oznaka =0;
/*Varijabla koja signalizira da li je posjeen barem jedan novi vor u
*prethodnoj iteraciji. Inicijalno je postavljena na true da bi se osigurao
*prvi ulazak u while petlju*/
bool poseteno_barem_edano_teme = true;
while (poseteno_barem_edano_teme)
{
poseteno_barem_edano_teme = false;
/*Nalazimo vorove ija je trenutna oznaka ona koja se obrauje u
*ovoj iteraciji*/
for(int momentalno_teme = 0; momentalno_teme < n; ++momentalno_teme)
if (oznaka[momentalno_teme] == momentalna_oznaka)
/*Sve prethodno neposjeene vorove iz liste susjedstva ovog
*vora oznaavamo sa sljedeom oznakom*/
for(int j = 0; j < lista_sosedstvo_dolzina[momentalno_teme]; ++j)
{ int soseden_cvor = lista_sosedstvo[momentalno_teme][j];
if(oznaka[soseden_cvor] == -1)
{
oznaka[soseden_cvor] = momentalna_oznaka + 1;
poseteno_barem_edano_teme = true;
}
}
//U narednoj iteraciji treba obraditi sljedeu oznaku
++momentalna_oznaka;
}
/*Kako je kod neteinskih grafova oznaka u BFS pretrazi ustvari najkraa
*udaljenost od poetnog vora vraamo oznaku vora kraj. Ako je njegova
*oznaka -1, onda vor nije bio nikako posjeen, pa ne postoji ruta od
*vora pocetak do vora kraj*/
return oznaka[kraj];
}

int main()
{
//Uitavanje podataka iz ulazne datoteke
int m;
cin>>n>>m;
for(int i = 0; i < m; ++i)
{
int a, b;
cin>>a>>b;
dodaj_granka(a, b);
}
int x, y;
cin>>x>>y;
//Najkraa ruta se odreuje primjenom BFS pretrage
int rastojanie = najkratka_ruta(x, y);
//Ispis rezultata u izlaznu datoteku
if (rastojanie == -1)
cout<<"Patot ne postoi.\n";
else
cout<<rastojanie;
return 0;
}
DFS
#include <iostream>
using namespace std;
const int max_n = 1000;
int n;
bool matrica_susjedstva[max_n][max_n];
void
dodaj_granu(int a, int b)
{
matrica_susjedstva[a][b] = true;
matrica_susjedstva[b][a] = true;
}
bool dfs_posjecen_cvor[max_n];
void dfs(int cvor)
int main()
{ dfs_posjecen_cvor[cvor] = true;
{ int m;
for(int i = 0; i < n; ++i)
cin>>n>>m;
if(matrica_susjedstva[cvor][i] && !dfs_posjecen_cvor[i])
int a,b;
dfs(i);
for(int i = 0; i < m; ++i)
}
{ cin>>a>>b;
bool povezani_cvorovi(int prvi_cvor, int drugi_cvor)
dodaj_granu(a,b);
{ for (int i = 0; i < n; ++i)
}
dfs_posjecen_cvor[i] = false;
int x,y;
dfs(prvi_cvor);
cin>>x>>y;
return dfs_posjecen_cvor[drugi_cvor];
if(povezani_cvorovi(x, y))
}
cout<<"postoi";
else
cout<<"Ne postoi";
return 0;
}

Vous aimerez peut-être aussi