Documente Academic
Documente Profesional
Documente Cultură
*Cuprins
* Notiuni generale
* Matricea drumurilor. Algoritmul lui Roy Warshall.
* Matricea drumurilor
* Matricea costurilor minime. Algoritmul lui Roy Floyd.
* Algoritmul lui Djikstra
* Notiuni generale
* Se numeste graf orientat G perechea de multimi X,U, unde X
este multimea varfurilor, iar U este multimea arcelor.
* Fiecare arc din aceasta multime are o orientare (un sens).
Inapoi
Inapoi
G = (X,U)
X={1,2,3,4}
U={(1,2),(1,3),(2,3),(2,4),(4,2),(4,3)}
Inapoi
de noduri adiacente.
Exemplu lant : 1,3,4
* Se numeste drum intr-un graf orientat o succesiune
de noduri adiacente la care arcele au toate aceeasi
orientare.
Exemplu drum : 1,2,4,2
* Lantul elementar este lantul in care nodurile sunt
distincte 2 cate 2 (ex : 1,2,3).
* Drumul elementar este drumul in care nodurile
sunt distincte 2 cate 2 (ex: 1,2,4,3).
Inapoi
G=(X,U)
U={(1,2),(1,4),(1,5),(2,3),(3,4),(4,6),(5,6)}
X={1,2,3,4,5,6}
Inapoi
* Graful partial
*Se da un graf G format din multimea varfurilor X si
multimea muchiilor U.
*Se numeste graf partial graful G1, format din perechea
(X1,U1), unde X1=X,U1<=U.
*Graful partial se obtine din graful initial prin suprimarea
unor muchii ale acestuia.
Inapoi
G1=(X1,U1)
X1={1,2,3,4,5,6}
U1={(1,2),(1,4),(2,3),(5,6)}
Inapoi
* Subgraful
* Se numeste subgraf al grafului G un graf G2, format din perechea
Inapoi
1
5
G2=(X2,U2)
X2={1,2,3,5}
U2={(1,2),(1,5),(2,3)}
Inapoi
g-(i)
g+(i)
Inapoi
succesiune de drumuri
* Matricea drumurilor este o matrice binara (la
fel ca cea de adiacenta), patratica (n x n), in
care fiecare element
* d[i][j] = 1, drum intre i si j
= 0, altfel
Inapoi
* Matricea drumurilor
i/j
i/j
0
Inapoi
Algoritmul Roy-Warshall
for(i=1;i<=n;i++)
for(j=1;J<=n;j++)
for(k=1;k<=n;k++)
if(a[i][j]==0&&i!=j&&i!=k&&j!=k)
a[i][j]=a[i][k]*a[k][i];
Inapoi
34
21
09
4
Inapoi
Inapoi
i/j
52
46
34
24
60
21
0
Inapoi
Inapoi
Inapoi
Programul principal
#include<iostream.h>
#include<fstream.h>
float
a[50],d[50],min;
int s[50], t[50], n, i,
j, r, poz;
void drum(int i)
{
if(t[i]) drum(t[i]);
cout<<i<< ;
}
void main()
{
fsteam
f(matrice.txt;ios::in)
;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
cout<<r=;cin>>r;
s[r]=1;
for(i=1;i<=n;i++)
{d[i]=a[r][i];
if(i!=r)
if(d[i]<3200)
Afisare
t[i]=r;}
for(i=1;i<=n-1;i++)
{min=32000;
for(j=1;i<=n;j++)
{if(s[j]==0)
if(d[j]<min)
{min=d[j];
poz=j;}
s[poz]=1;
for(j=1;j<=n;j++)
if(s[j]==0)
if(d[j]>d[poz]+a[poz][j])
{d[j]=d[poz]+a[poz][j];
t[j]=poz;}}
for(i=1;i<=n;i++)
if(i!=r)
if(t[i])
{cout<<distranta de
la<<r<<la<<i<<este<<d
[i]<<endl;
drum(i);
cout<<endl;}
else
cout<<nu exista drum de la
<r<<la<<i<<endl;
f.close();}
Inapoi
4
4
4
i/j
34
44
31
53
63
34
63
2
5
3
Algoritmul lui
Dijkstra
Inapoi
*Realizat de:
* Dima Teodor
* Dutu Razvan
* Ionescu Costin
* Ivan Alexandru
* Nicola Eduard
* Panait Beatrice