Documente Academic
Documente Profesional
Documente Cultură
Dijkstra
Iepurasul de Paste trebuie sa transporte ouale colorate tuturor magazinelor din toata lumea.Sa se
calculeze costurile minime ale drumurilor de la un nod citit la toate celalte si sa se afiseze drumurile
pentru care s-au obtinut costurile minime.
#include<fstream>
#include<iostream>
int mc[20][20],n,viz[20],dr[20],lung[20];
void citire()
{int i,j,x,y,c;
ifstream f("graf.in");
f>>n;
for (i=1;i<=n;i++)
if (i!=j) mc[i][j]=maxi;
else mc[i][j]=0;
while (f>>x>>y>>c)
mc[x][y]=c;
f.close();
void drum(int i)
{ if (i)
{ drum(dr[i]);
cout<<i<<"
";
void Dijkstra()
{ int x,i,k; //initializare
cout<<"nodul de
plecare x=";cin>>x;
viz[i]=0;
lung[i]=mc[x][i];
if (lung[i]<maxi) dr[i]=x;
else dr[i]=-1;
viz[x]=1;
dr[x]=0;
lung, dr
int mini=maxi;
for (i=1;i<=n;i++)
if (viz[i]==0 &&
lung[i]<mini)
{ mini=lung[i];
k=i; }
if (lung[k]<maxi)
{ viz[k]=1;
if (viz[j]==0 &&
lung[j]>lung[k]+mc[k][j])
{ lung[j]=lung[k]+mc[k][j];
dr[j]=k; }
for (i=1;i<=n;i++)
if (i==x) cout<<"nu
else if (lung[i]==maxi)
"<<i<<endl;
else
"<<i<<" este:";
drum(i);
cout<<" cu lungimea
"<<lung[i]<<endl;
int main()
{ citire();
Dijkstra();
3. Roy –Warshall
Alina s-a infectat cu noul virus SARS-CoV-2.Aceasta a intrat in contact cu n persoane, numerotate de la 1
la n, 1 fiind persoana cu care s-a intalnit cel mai recent.Acele persoane au intrat in contact cu alte m
persoane.Alina vrea sa isi dea seama de la cine a luat virusul.Determinati persoana de la care e posibil sa
se fi infectat.Daca sunt mai multe persoane suspecte se va alege cel cu care s-a intalnit mai recent.
Int n, m, a[20][20];
#include<fstream>
#include<iostream>
using namespace std;
int main()
{ifstream fin(“graf.in”)
fin>>n>>m;
{fin>>x>>y;
a[x][y]=a[y][x]=1;}
cout<<a[i][j]<<” “;
cout<<endl;}
{x=0;
x=x+a[i][j];
4.Orasul Timișoara are n intersectii unite prin m istrazi bidirecționale.Datorită gropilor de pe toate
străzile administratorul orașului dorește să repare cât mai multe străzi cu un cost minim, și să se poată
circula ușor între oricare două intesecții de pe străzi reparate.Acesta este obligat de colegi să repare
anumite străzi.Determinați costul minim pentru repararea străzilor, astfel încât să fie reparate străzile
dorite de colegi și să se poată circula ușor între oricare două străzi reparate.
Algoritm Kruskal
#include<fstream>
struct muchie
{ int x,y,c;
}u[50];
int a[20][20],n,m;
void citire()
{ int i;
ifstream f(“graf.in”);
f>>n;
m=1;
while (f>>u[m].x>u[m].y>>u[m].c)
m++;
f.close();
for(i=1; i<=m;i++)
{ a[u[i].x][u[i].y]=u[i].c;
a[u[i].y][u[i].x]=u[i].c;
int conex()
int c[20],viz[20],i,p,u;
for (i=1;i<=n;i++)
viz[i]=0;
p=u=1;
viz[1]=1;
c[u]=1;
while(p<=u)
{ u++;
c[u]=i;
viz[i]=1;
p++;
}
for (i=1; i<=n;i++)
if (viz[i]==0) return 0;
return 1;
void ordonare()
{ int i,j;
muchie aux;
if(u[i].c>u[j].c)
{ aux=u[i];
u[i]=u[j];
u[j]=aux;
void apm_kruskal()
{ int i,j,k,v,w,l[20],ct=0;
k=0;
i=1;
while (k<n-1)
{ if (l[u[i].x]!=l[u[i].y])
{ k++;
ct=ct+u[i].c;
cout<<”[“<<u[i].x<<”,”<<u[i].y<<”]“;
v=l[u[i].y];
w=l[u[i].x];
for (j=1;j<=n;j++)
if (l[j]==v) l[j]=w;
i++;
int main()
{ citire();
else
{ ordonare(); apm_kruskal();}
#include <fstream>
int a[20][20],n,viz[20];
void citire()
{int x,y,z;
ifstream f("graf.in");
while (f>>x>>y>>z)
a[x][y]=a[y][x]=z;
f.close();
void afisare()
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void apm_prim()
{ int k,i,j,xp,v,w,min,ct=0;
viz[xp]=1; //primul vf
{ min=a[i][j];
ct=ct+a[v][w];
int main()
{ citire();
afisare();
apm_prim();