Tarea 4 Estructura de datos y Algoritmos: "Busqueda de ciclos en Grafos"

El archivo entregado como solucin a la Tarea Propuesta, consta de 3 Archivos:

- testCiclo.c: 	Codigo fuente de programa solucin para la tarea, se compone principalmente de 2 partes principales
		La primera parte es el codigo correspondiente a la lectura del archivo txt entregado como parametro
 		(y que contiene el grafo a procesar) y la comprobacion de que los argumentos entregados a main sean 
		correctos, que el archivo txt se pueda abrir, etc. Y una segunda parte donde se implemento el algoritmo 
		de exploracion de grafos en profundidad (DFS), al cual se le hizo una modificacion, especificamente en
		el codigo DFs_visit donde se pregunta si el color del nodo que estamos visitando es plomo (p) o negro (n)
		significa que ya visitamos este nodo y encontramos un ciclo, en este punto y si se ha detectado un ciclo,
		el programa se detiene y muestra el ciclo que se encontro.

- makefile:	Archivo para compilar el programa, se le incluyo ademas una parte para eliminar los archivos *.o que
		quedan al compilar el programa testCiclo.c y tambien se le incluyo una parte para eliminar el archivo
		ejecutable en caso de ser necesario.

- Readme.txt:	Este archivo, que explica a grandes rasgos el funcionamieno del programa, archivos que componen la
		solucion de la tarea y forma de compilar y ejecutar el programa.

- ejemplo.txt:  Este archivo es un ejemplo de grafo, es el mismo que el profesor puso en la descripcion de la tarea, 
	        lo incluimos para facilitar la correccin al ayudante.

La estructura de la solucion dada para esta tarea es la siguiente:

- Primero, el programa comprueba que los parametros entregados sean correctos y que el archivo que contiene el grafo 
  se pueda abrir, si estas condiciones no se cumplen, el programa entrega los mensajes de error correspondientes y termina.

- Se lee la primera linea del archivo, que contiene el tamao del grafo que debemos procesar, este numero se almacena
  en la variable size, luego de esto, creamos la matriz una matriz cuadrada de tamao size X size para crear luego la
  matriz de adyacencia.

- Luego, leemos las demas lineas del archivo y llenamos para cada nodo sus nodos adyacentes, se eligio la representacin
  por matriz de adyacencia por la facilidad de trabajar luego con ella (cada fila de la matriz representa un nodo y
  la prescencia de un 1 en la columna j, significa que ese nodo tiene un arco hacia el nodo j; de esta manera, un 1 
  en la posicin 4,1 por ejemplo significa que el nodo 4 tiene un arco hacia el nodo 1)

- Luego, mostramos por pantalla la matriz de adyacencia y comenzamos a explorar el grafo en busca de ciclos con el algoritmo
  DFS, agregandole una linea para comprobar que el color no sea plomo (p) o negro (n), ya que de ser este el caso, nos encon-
  traramos en precencia de un cilo, en este minuto el programa termina y muestra el cilo encontrado.

- Para mostrar el ciclo encontrado se decidio ocupar un vector como estructura de datos, por su facil manipulacion y facil recorrido
  de sus elementos; llenamos el vector con los nodos visitados en el ciclo y luego, para desplegarlos por pantalla en el orden 
  correcto, recorremos el vector de atras hacia adelante y mostramos por pantalla cada elemento del vector, asi, encontramos el orden
  correcto del ciclo encontrado. 

- Si el ciclo no se encuentra, el programa termina y despliega el mensaje en pantalla informando que el grafo analizado no
  presenta ciclos.

Para ejecutar el programa, desde la linea de comandos ejecutar el comando make para la compilacion y creacion del ejecutable 
testCiclo que resuelve el problema planteado en la tarea; luego, ejecutar el comando testCiclo <nombre_archivo_de_entrada> para
comenzar la busqueda de ciclos en el grafo.

Para eliminar los archivos *.o producto de la compilacion del programa *.c, ejecutar el comando make clean; y para eliminar el
ejecutable creado por la compilacion, ejecutar el comando make clear.

*NOTA: para la correcta ejecucion del programa, el archivo que contiene el grafo NO debe tener lineas en blanco al final (al igual como fue
       especificado en el enunciado de la tarea), de lo contrario, el programa leeria estas lineas como un nodo mas y podria generar
       errores en la busqueda de ciclos.


Integrantes:

Rodrigo Pinto A.  9821028-8
Sergio Cataln O. 9821068-7
