Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Algoritmos de Grafos
2
Ejemplo: (Usando algoritmo F)
1 4 2 3 15 5 50 30 D 1 2 3 4 5 50 15 30
3
Algoritmo F Funcion F(L[1..n,1..n]):matriz[1..n,1..n]
matriz D[1..n,1..n] D=L P=0 para k=1 hasta n hacer para i=1 hasta n hacer para j=1 hasta n hacer si D[i,k]+D[k,j]<D[i,j] entonces D[i,j]=D[i,k]+D[k,j] P[i,j]=k finsi finpara Devolver D L=matriz con las longitudes de las aristas L[i,j]=0, i=1,2,...,n L[i,j]0 si (i,j) L[i,j]= si no (i,j) Algoritmo F
4
Algoritmo Ws CONST n = ...; (* numero de vertices del grafo *)
TYPE MATRIZ = ARRAY[1..n],[1..n] OF BOOLEAN; PROCEDURE Ws (VAR L,D:MATRIZ); VAR i,j,k: CARDINAL; BEGIN FOR i:=1 TO n DO FOR j:=1 TO n DO D[i,j]:=L[i,j] END END; FOR k:=1 TO n DO D[i,j]:=D[i,j] OR (D[i,k] AND D[k,j]) END Ws; grafo g = (V,A) cuya matriz de adyacencia sea L
5
void InitGrafo(int costos[MAXNODOS][MAXNODOS], int nnodos) { int i, j;
Algoritmo de B-F void InitGrafo(int costos[MAXNODOS][MAXNODOS], int nnodos) { int i, j; for(i=0; i<nnodos; i++) for(j=0; j<nnodos; j++) costos[i][j] = INFINITO; }
6
int B-F(const int costos[MAXNODOS][MAXNODOS], const int nnodos, const int origen, int *mindist, int *predec) { int i, u, v; for(i=0; i<nnodos; i++) { mindist[i] = INFINITO; predec[i] = -1; } mindist[origen] = 0; for(i=0; i < nnodos-1; i++) { for(u=0; u < nnodos; u++) { for(v=0; v < nnodos; v++) { if(costos[u][v] != INFINITO) { if(mindist[v] > mindist[u] + costos[u][v]) { mindist[v] = mindist[u] + costos[u][v]; predec[v] = u;
7
Ejecución for(u=0; u < nnodos; u++){ for(v=0; v < nnodos; v++){
if(costos[u][v] != INFINITO && mindist[v] > mindist[u] +costos[u][v]) return 0; return 1; }
8
ALGORITMO DJ Dj(Grafo g,int v) { int c,i,num_elem=ordenGrafo(g);
int *costo=calloc(num_elem,sizeof(int)) desmarcarGrafo(g); For(i=0;i<=num_elem;i++) costo[i]=costoArco(g,v,i+1); marcarvertice(g,v); Costo[v-1]=0; While((v=sigvertice(g,costo,num_elem))!=-1) { marcarvertice(g,v); for(i=0;i<=num_elem;i++) if(!marcadovertice(g,i+1))&&(c=costoarco(g,v, i+1))!=-1) if(costo[i]==-1) costo[i]=costo[v-1]+c; else costo[i]=min(costo[i],costo[v-1]+c) }
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.