/*-------------------------------------------------------------------*/
/* "DISENO Y MANEJO DE ESTRUCTURAS DE DATOS EN C"                    */
/* Prof. Jorge Villalobos - Universidad de los Andes                 */
/*-------------------------------------------------------------------*/
/* TAD Grafo - Probador interactivo                                  */
/*-------------------------------------------------------------------*/

typedef int TipoG;
#include "Grafo2.h"		/* #include TAD Grafo[ int ] */

/*-------------------------------------------------------------------*/
       		
void main( void )
{  int op, elem, v1, v2, costo;
   Lista lst;
   FILE *fp = fopen( "grafo1.txt", "r" );
   Grafo g = ( fp == NULL ) ? inicGrafo( ) : cargarGrafo( fp );

   while(1)
   {   
       printf("\n------------------------------\n");
       printf("0. Salir\n");
       printf("1. Insertar un vertice\n");
       printf("2. Insertar un arco\n");
       printf("3. Eliminar un arco\n");
       printf("4. Marcar un vertice\n");
       printf("5. Desmarcar un vertice\n");
       printf("6. Desmarcar grafo\n");
       printf("7. Costo de un arco\n");
       printf("8. Sucesores\n");
       printf("> Opcion: ");
       scanf("%d",&op);

       switch(op)
       {  case 0: salvarGrafo( g, fp = fopen( "grafo1.txt", "w" ) );
		  fclose( fp );
		  destruirGrafo( g );
		  return;
	  case 1: printf( "Contenido vertice: " );
		  scanf( "%d", &elem );
		  insVertice( g, elem );
		  break;
	  case 2: printf( "Origen: " );
		  scanf( "%d", &v1 );
		  printf( "Destino: " );
		  scanf( "%d", &v2 );
		  printf( "Costo: " );
		  scanf( "%d", &costo );
		  insArco( g, v1, v2, costo );
		  break;
	  case 3: printf( "Origen: " );
		  scanf( "%d", &v1 );
		  printf( "Destino: " );
		  scanf( "%d", &v2 );
		  elimArco( g, v1, v2 );
		  break;
	  case 4: printf( "Vertice: " );
		  scanf( "%d", &v1 );
		  marcarVertice( g, v1 );
		  break;
	  case 5: printf( "Vertice: " );
		  scanf( "%d", &v1 );
		  desmarcarVertice( g, v1 );
		  break;
	  case 6: desmarcarGrafo( g );
		  break;
	  case 7: printf( "Origen: " );
		  scanf( "%d", &v1 );
		  printf( "Destino: " );
		  scanf( "%d", &v2 );
		  printf( "Costo = %d\n", costoArco( g, v1, v2 ) );
		  break;
	  case 8: printf( "Vertice: " );
		  scanf( "%d", &v1 );
		  impLista( lst = sucesores( g, v1 ) );
		  for( primLista( lst ); longLista( lst ) != 0; elimLista( lst ) );
		  break;
       }
       impGrafo( g );
   }
}
