Dijkstra em c
#include <stdlib.h>
#define MAX 10
#define MEMBRO 1
#define NAOMEMBRO 0
#define INFINITO 100000
// GRAFO ======================================================================= enum tipo_status {espera, pronto, processado};
typedef int tipo_chave;
typedef int tipo_peso;
typedef struct
{
tipo_chave chave; // DEMAIS CAMPOS enum tipo_status status;
}
tipo_elemento;
typedef struct
{
int conectado; tipo_peso peso; enum tipo_status status;
}
tipo_aresta;
struct tipo_grafo
{
tipo_elemento vertices[MAX]; tipo_aresta arestas[MAX][MAX]; int num_vertices;
};
typedef struct tipo_grafo *grafo;
//////////////////// Grafo ///////////////////////////////////////////////////// int cria(grafo *g)
{
int i, j; if(!(*g = (grafo)malloc(sizeof(struct tipo_grafo)))) return 0; (*g)->num_vertices = 0; for(i = 0; i < MAX; i++) for(j = 0; j < MAX; j++) { (*g)->arestas[i][j].conectado = 0; (*g)->arestas[i][j].peso = 0; (*g)->arestas[i][j].status = pronto; } return 1;
}
int termina(grafo *g)
{
free(*g); return 1;
}
int busca_vertice(grafo g,tipo_chave ch)
{
int i; for(i = 0; i < MAX && i < g->num_vertices; i++) if(g->vertices[i].chave == ch) return i; return -1;
}
int insere_vertice(grafo g,tipo_elemento e)
{
if(g->num_vertices<MAX) { if(busca_vertice(g,e.chave) == -1) { g->vertices[g->num_vertices] = e; g->num_vertices++; return 1; } } return 0;
}
int insere_aresta(grafo g,tipo_chave ch1,tipo_chave ch2,tipo_peso peso)
{
g->arestas[ch1][ch2].conectado = 1; g->arestas[ch1][ch2].peso = peso; g->arestas[ch1][ch2].status = espera; g->arestas[ch2][ch1].conectado = 1; g->arestas[ch2][ch1].peso = peso; g->arestas[ch2][ch1].status = espera; return 1;
}
int remove_aresta(grafo g,tipo_chave ch1,tipo_chave ch2)
{
int i; for(i = 0; i