Algoritmul LEE
Algoritmul lui LEE
#include<iostream>
#include<fstream>
using namespace std;
int a[20][20],c[20],v[20],ns,n;
int prim;
int ultim;
void citire(int a[20][20],int &n)
{
ifstream f("graf.in");
int x,y;
f>>n;
while(f>>x>>y)
a[x][y]=a[y][x]=1;
f.close();
}
void afisare(int a[20][20],int n)
{
cout<<"Matricea de adiacenta este : "<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
int exista_nod_nevizitat(int v[20],int n)
{
for(int i=1;i<=n;i++)
if(v[i]==-1)
return i;
return 0;
}
int main()
{ citire(a,n);
afisare(a,n);
for(int i=1;i<=n;i++)
v[i]=-1;
cout<<"Dati nodul de start : "; cin>>ns;
v[ns]=0;
cout<<"Parcurgerea in latime este : ";
cout<<ns<<" ";
prim=ultim=1;
c[ultim]=ns;
while(exista_nod_nevizitat(v,n)!=0)
{
if(prim<=ultim)
{//adaug la coada toate nodurile adiacente si nevizitate
for(int i=1;i<=n;i++)
if(a[c[prim]][i]==1)
if(v[i]==-1)
{
ultim++;
c[ultim]=i;
cout<<i<<" ";
v[i]=v[c[prim]]+1;
}
prim++;
}
else
{
ns=exista_nod_nevizitat(v,n);
v[ns]=0;
prim=ultim=1;
c[prim]=ns;
cout<<ns<<" ";
}
}
for(int i=1;i<=n;i++)
cout<<"Distanta minima dintre nodul "<<i<<" si "<<ns<<" este "<<v[i]<<endl;
return 0;
}