|
CODIFICACION DE LAGORITMO DE DIJKTRA
#include <stdio.h>
#include <conio.h>
#define N 5
#define INF 1000
void dijkstra(int M[][N], int S[], int D[]);
int buscaMenor (int D[], int S[]);
int min(int, int);
main(){
int i;
int M[N][N]={{0,4,11,INF,INF},
{INF,0,INF,6,2},
{INF,3,0,6,INF},
{INF,INF,0,INF,INF},
{INF,INF,5,3,0},};
int S[N]={-1,-1,-1,-1,-1};
int D[N]={0,0,0,0,0};
dijkstra(M, S, D);
printf("Distancia minima, entre cada verticenn");
for (i=0;i<N;i++)
printf("%c ",i+65);
puts("");
for (i=0;i<N;i++)
printf("%d ",D[i]);
printf("nnRecorridon");
for (i=0;i<N;i++)
printf("%c -> ",S[i]+65);
getch();
return 0;
}
void dijkstra(int M[][N], int S[N], int D[N]){
int v,w, i, j, menor;
for (i=0;i<N;i++)
printf("%c ",i+65);
puts("");
for(i=0;i<5;i++)
printf("%d ",i);
puts("");
v=0;
printf("nDigite nodo de partidann");
scanf("%d",&v);
w=v;
S[0]=v;
for (i=0;i<N;i++)
D[i]=M[v][i];
for(v=1;v<N;v++)
{
menor=buscaMenor(D,S);
S[v]=menor;
for(w=v;w<N;w++)
D[w]=min(D[w],D[menor]+M[menor][w]);
}
}
int buscaMenor(int D[N], int S[N])
{
int i,j, menor=INF+1, ok=-1, indice=-1;
for(i=0;i<N;i++)
{
if(D[i] < menor) {
for(j=0;j<N;j++)
if(S[j] ==i){
ok=1;
menor=INF+1;
}
if(ok==0){
indice = i;
menor = D[i];
}
}
ok=0;
}
return indice;
}
int min(int w, int vIntercepto){
int menor =w;
if (vIntercepto < w)
menor = vIntercepto;
return menor;
}
|
|