Codigo Djikstra
/*
Alisson Prado - 11/2014
Disciplina Topicos Especiais : Grafos - Professora Marcia Zanetti
Aplicação: Dijkstra Calculo de rotas
O que é "Dijkstra"? Algoritmos de roteamento (Vetor de Distâncias)
*/
#include
#include
#include
#define FLSH gets(l) int destino, origem, vertices = 0; int custo, *custos = NULL; void dijkstra(int vertices,int origem,int destino,int *custos)
{
int i,v, cont = 0; int *ant, *tmp; int *z;
/* vertices para os quais se conhece o caminho minimo */ double min; double dist[vertices];
/* vetor com os custos dos caminhos */
/* aloca as linhas da matriz */ for (i = 0; i < vertices; i++) { if (custos[(origem - 1) * vertices + i] !=- 1) { ant[i] = origem - 1; dist[i] = custos[(origem-1)*vertices+i];
}
else { ant[i]= -1; dist[i] = HUGE_VAL;
}
z[i]=0;
}
z[origem-1] = 1; dist[origem-1] = 0;
/*
Laco principal - Considerei que pelo menos uma vez professora Marcia o dado deve ser digitado. Observei vários exemplo mas que sem uma entrada dá erro.
*/
do {
/* Encontrando o vertice que deve entrar em z */ min = HUGE_VAL; for (i=0;i=0 && dist[i] 0 ; i--) { printf("%d -> ", tmp[i-1]);
}
printf("%d", destino); printf("\n\tCusto: %d\n",(int) dist[destino-1]);
}
}
void cabecalho(void)
{
printf("Implementacao do Algoritmo de Dijasktra\n"); printf("Comandos:\n"); printf("\t d - Adicionar um Grafo\n"
"\t r - Procura Os Menores Caminhos no Grafo\n"
"\t CTRL+c - Sair ou Pára o Programa\n"); printf(">>> ");
}
void add(void)
{
int i, j; do { printf("\nInforme o numero de vertices (minimo 2 ): "); scanf("%d",&vertices); } while (vertices < 2 ); if (!custos) free(custos); custos = (int *) malloc(sizeof(int)*vertices*vertices); for (i = 0; i vertices); if (origem) { do { printf("Destino da aresta (entre 1 e %d, menos %d): ", vertices, origem); scanf("%d", &destino);
} while (destino < 1 || destino > vertices || destino == origem); do { printf("Custo (positivo) da aresta do