Saludos, ya comence a hacer el codigo, primero tengo una typedef struct que me indica que voy a tener una matriz de tipo int a la que le tengo que asignar memoria dinamicamente y el numero de vertices, le pido cuantos vertices y aristas quiero, y despues inicializo el grafo, osea que cada uno de los elementos de la matriz sean -1 indicandome que no hay arista entre los vertices i y j, pero no se si esta parte y la de agregarArista estan bien hechas, exactamente esta parte:
void inicializaGrafo(Grafo *grafo,int num)
{
int i,j,valor;
grafo->numVertices = num;
grafo
->elementos
= (int**)malloc(valor
= num
*num
*sizeof(int)); for(i=0;i < num;i++)
{
for(j=0;j < num;j++)
grafo->elementos[i][j] = -1;
}
}
el codigo completo es este:
#include <stdio.h>
#include <stdlib.h>
#define AGREGAR_ARISTAS 1
#define ELIMINAR_ARISTAS 2
#define SALIR 3
typedef struct
{
int **elementos;
int numVertices;
}Grafo;
int max_aristas(int num);
void agregarArista(int arista,int vertice1,int vertice2,Grafo *grafo);
int main()
{
Grafo grafo;
int opcion,numAristas,num,continuar = 1,maximo,arista,vertice1,vertice2;
printf("Libreria de Grafos!!\n"); printf("Dame numero de vertices: "); printf("Dame numero de aristas: "); maximo = max_aristas(num);
if(numAristas > maximo)
printf("Error! El grafo no puede tener mas de %d aristas",maximo
); else
{
inicializaGrafo(&grafo,num);
do
{
printf("1. Agregar Arista\n"); printf("2. Eliminar Vertice\n"); printf("3. Eliminar Arista\n"); case AGREGAR_ARISTAS:
printf("Dame el valor de la arista: "); printf("Dame el valor del primer vertice: "); printf("Dame el valor del segundo vertice: "); agregarArista(arista,vertice1,vertice2,&grafo);
break;
case ELIMINAR_ARISTAS:
//eliminarArista();
break;
case SALIR:
continuar = 0;
break;
default: printf("Opcion invalida\n"); }while(continuar);
}
return 0;
}
int max_aristas(int num)
{
int maximo;
maximo = (num(num-1))/2;
return maximo;
}
void inicializaGrafo(Grafo *grafo,int num)
{
int i,j,valor;
grafo->numVertices = num;
grafo
->elementos
= (int**)malloc(valor
= num
*num
*sizeof(int)); for(i=0;i < num;i++)
{
for(j=0;j < num;j++)
grafo->elementos[i][j] = -1;
}
}
void agregarArista(int arista,int vertice1,int vertice2,Grafo *grafo)
{
grafo->elementos[vertice1][vertice2] = arista;
}
gracias