e ai beleza galera?! to tentando fazer um programa ke calcula o custo e exibe da rota mais barata, essa função bf é o algoritimo de bellman ford e ele retorna um vetor com o caminho mais barato de cada nó... eu ainda fiz a parte que soma a rota mais barata mas mesmo assim n ta funcionando, se algué puder me ajudar eu agradeço!!! #include <stdio.h>
#include <stdlib.h>
struct telemento{
int valor;
struct telemento *prox;
};
typedef int tgrafo[10][10];
int *bf(tgrafo *g, int v){
int k,j,i;
int dist[10], pred[10], *resposta
for(i=0;i<10;i++){
dist[i]= 99;
pred[i] = -1;
}
dist[v]=0;
for(k=1;k<10;k++){
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if((*g)[i][j] && dist[j] > dist[i] + (*g)[i][j]){
dist[j] = dist[i] + (*g)[i][j];
pred[j]=i;
}
}
}
}
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if((*g)[i][j] && dist[j] > dist[i] + (*g)[i][j]){
return NULL;
}
}
}
resposta= ((int*)MALLOC(10*sizeof(int));
for(i=0;i<10;i++)
resp[i] = pre[i];
return resposta
}
int main(){
int orig, dest, vet[10], aux1, aux2, i;
float soma;
tgrafo g1 = {{0,600,550,600,700,0,500,550,0,0},
{600,0,700,450,500,600,0,0,0,700},
{550,700,0,450,650,700,550,0,650,0},
{600,450,450,0,0,550,0,550,700,600},
{700,500,650,0,0,0,0,600,0,700},
{0,600,700,550,0,0,700,0,500,0},
{500,0,550,0,0,700,0,800,0,0},
{550,0,0,550,600,0,800,0,0,650},
{0,0,650,700,0,500,0,0,0,800},
{0,700,0,600,700,0,0,650,800,0}};
printf("Informe a origem:\n ");
scanf("%d",&orig);
printf("Informe o destino:\n ");
scanf("%d",&dest);
vet[i] = (*bf(&g1, orig));
soma=0;
while(vet[i]!= -1){
for(i=orig;i<=10;i--){
if(dest == i){
aux1 = vet[i];
aux2 = i;
soma = (soma + g1[aux1][aux2]);
dest = vet[i];
}
}
}
printf("\nCusto da viagem mais barata: %4.2f", soma);
system("PAUSE");
return 0;
}