SlideShare una empresa de Scribd logo
Técnicas de Programación I UNIVERSIDAD PRIVADA SAN PEDRO TEMA : TRABAJO DE INVESTIGACION DE GRAFOS Sepulveda Marreros Nataly Salazar cabello Jaime Romero Palacios Ricardo Quiroz León Jaime Fiestas Estrada Omar ESCUELA DE ING. INFORMATICA Y DE SISTEMAS FACULTAD DE INGENIERIA
GRAFOS: Estructura de datos no lineal (Programación no numérica) que permiten representar los diferentes tipos de relaciones entre objetos G=(N,A) Supongamos: N={1,2,3,4,5} Y la siguiente relación en A: R={(1,2);(2,3);(3,4);(4,5)} En forma de grafo sería: 1 2 3 4 5
TIPOS DE GRAFOS: GRAFO DIRIGIDO o DIGRAFO * * GRAFOS NO DIRIGIDO * * Grafo Valorado
Búsqueda en Profundidad: Se implementa de forma recursiva, aunque también puede realizarse con una pila. Se utiliza un array “val” para almacenar el orden en que fueron explorados los vértices. int  id=0; int  val[V];  void  buscar()  { int  i; for  (i=1; i<=V; i++)  val[i]=0; for  (i=1; i<=V; i++)  if  (val[i]==0)  visitar(i);  } void  visitar(int i) // matriz de adyacencia  {  int  t; val[i]=++id; for  (t=1; t<=V; t++)  if  (a[i][t] &&  val[t]==0)  visitar(t); } void  visitar(int i) // listas de adyacencia  {  nodo  *t;  val[i]=++id;  for  (t=a[i]; t!=z; t=t->sig)  if  (val[t->v]==0) visitar(t->v); }
Representación de Grafos:  Una característica especial en los grafos es que podemos representarlos utilizando dos estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que adoptarán tiempos distintos dependiendo de la forma de representación elegida. En particular, los tiempos de ejecución variarán en función del número de vértices y el de aristas, por lo que la utilización de una representación u otra dependerá en gran medida de si el grafo es denso o disperso. Para nombrar los nodos utilizaremos letras mayúsculas, aunque en el código deberemos hacer corresponder cada nodo con un entero entre 1 y N (número de nodos o vértices) de cara a la manipulación de los mismos.
Obtención del camino de un Grafo: Método DIJKSTRA: es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vértices en un grafo dirigido y con pesos en cada  arista . void  iniciaGrafo() { for  ( int  i=1; <=n; i++) memset(&C[i][1], 0, n * sizeof(int)); } void  insertarnodo( int  a,  int  b,  int  c) { C[a][b] = C[b][a] = c; } int  D[MAXN];  /* distancias mínima desde s al nodo i */ int  padre[MAXN];  /* ruta hacia el nodo i desde s */ int  permanente[MAXN]; /* verdadero al tener la menor ruta al nodo i */
// calculamos las distancias while (  ! pq.empty() ) { nodotmp = pq.top();  pq.pop(); Vi = nodotmp.second; if  ( !permanente[Vi] ) { permanente[Vi] =  true ; for  (Vj = 1; Vj <= n; Vj++) if (!permanente[Vj] && C[Vi][Vj]>0 && D[Vi]+C[Vi][Vj]<D[Vj]) D[Vj] = D[Vi] + C[Vi][Vj], padre[Vj] = Vi, pq.push( pair <int,int> (-D[Vj], Vj) ); } } }  // leemos las aristas for ( int  i=0; i<e; i++) cout <<“Ingrese Arista1: ”; cin >>a; cout <<“Ingrese Arista2: ”;  cin >>b; cout <<“Ingrese Arista3: ”;  cin>>c; insertanodo(a, b, c); // usamos dijkstra para calcular la menor distancia // desde el i-esimo nodo hacia los demas for  ( int  i=1; i<=n; i++) dijkstra( i ), cout <<“La menor distancia desde el nodo hacia los otros nodos es: “<< i; imprimeGrafo(n), cout <<endl; }
Método WARSHALL: Para lograr el propósito del recorrido mínimo dentro de un grafo G, es necesario para nuestro caso en particular (puesto que no es la única técnica existente) la utilización del algoritmo de WARSHALL para el camino mínimo, el cual se expresa de la forma siguiente:
#include <stdio.h> #include <conio.h> #include <ctype.h> #include <stdlib.h> #include <iostream.h> #include <string.h> #define N 50 struct grafo {int dato; grafo *grafo[N]; grafo *sig; }*Pgrafo; grafo *insertar(grafo *nodo, grafo *Agrafo, int num) {if( !Agrafo ) {Agrafo= (grafo*) malloc( sizeof( grafo ) ); Agrafo->sig= NULL; Agrafo->dato= num; if( !nodo ) return Agrafo; else nodo->sig= Agrafo; return Agrafo; }
insertar( Agrafo, Agrafo->sig, num ); return nodo;} int enlazarfull( grafo *nodo ) {  int i; int vacio; if( !nodo->sig )return 0; for( i=0;i<vacio(nodo);i++ ) nodo->grafo[i]= NULL; return 1;} void main() { char op='A'; int val; int i; while(op!='S' ) {clrscr(); cout<<&quot;\t [N].- Nuevo Nodo.&quot; ; cout<<&quot;\t [E].- Menu Enlazes.&quot;; cout<<&quot;\t [V].- Ver Grafo.&quot;; cout<<&quot;\t [S].- Salir.&quot;; cout<<&quot;\t\t Digite Opcion: [  ] &quot;; cin>>op;
switch(op) { case 'N': cout<<&quot;\n\n Numero: &quot;; cin>>(&quot;&i&quot;,&val); Pgrafo= insertar( Pgrafo, Pgrafo, val ); break; case 'E':  enlazarfull(Pgrafo); break; case 'V':  break; } } cout<<&quot;\n\n Pulsa una tecla para salir...&quot;; getch(); return 0; }
GRACIAS TOTALES, nos vemos en el bingo

Más contenido relacionado

PPSX
Funcion arcoseno en matlab
PPTX
Función arco seno en matlab(ups)
PPTX
C4 mate funciones raíz cuadrada - 4º
PPT
Matlab Función Arco Tangente
PPTX
Implementacion Algoritmo LRTA*
PPTX
Análisis espectral (iva n mareño)
PPTX
Análisis espectral
PDF
Capítulo 8: Criptografía de curvas elípticas
Funcion arcoseno en matlab
Función arco seno en matlab(ups)
C4 mate funciones raíz cuadrada - 4º
Matlab Función Arco Tangente
Implementacion Algoritmo LRTA*
Análisis espectral (iva n mareño)
Análisis espectral
Capítulo 8: Criptografía de curvas elípticas

La actualidad más candente (12)

DOCX
Programacion ii
PPTX
Eficiencia en uso de recursos memoria2 p
 
PDF
Coordenadas1
DOC
Act 2 gz_parte_ii
PDF
Tarea 12 funcion gràfica uni minuto
PDF
Actividades
PPTX
Comandos básicos.pptxe eni
DOCX
Clases graficas ultima_clase_matlab
DOCX
estructura lineal lenguaje C
PPTX
Algoritmo
ODP
Bfs en grafos
PPTX
Programacion ii
Eficiencia en uso de recursos memoria2 p
 
Coordenadas1
Act 2 gz_parte_ii
Tarea 12 funcion gràfica uni minuto
Actividades
Comandos básicos.pptxe eni
Clases graficas ultima_clase_matlab
estructura lineal lenguaje C
Algoritmo
Bfs en grafos
Publicidad

Similar a Grafos (20)

PDF
Tema9 ne
PDF
Grafos-2021.pdf
PPT
elementaryAlgorithms.ppt
PDF
10.Grafos.y.Algoritmos.Avanzados.para.Grafos.pdf
PPT
Grafos Iii
PPT
Recorrido de Grafos
PDF
Teoría de Grafos en sage
PDF
Grafos en sage
PPT
grafosssssssßssssssssssssssssssssssss.ppt
PPTX
Análisis de algoritmos
PPTX
PPT
Grafos Basicos para principiantes paso uno
PPT
Grafos - Estructura de Datos - Matemática discreta
PDF
Teoria-de-grafos
PPT
19. Grafos.ppt
DOCX
Aplicaciones de los árboles y grafos
PPTX
TRABAJO DE GRAFOS
PPTX
Grafos
Tema9 ne
Grafos-2021.pdf
elementaryAlgorithms.ppt
10.Grafos.y.Algoritmos.Avanzados.para.Grafos.pdf
Grafos Iii
Recorrido de Grafos
Teoría de Grafos en sage
Grafos en sage
grafosssssssßssssssssssssssssssssssss.ppt
Análisis de algoritmos
Grafos Basicos para principiantes paso uno
Grafos - Estructura de Datos - Matemática discreta
Teoria-de-grafos
19. Grafos.ppt
Aplicaciones de los árboles y grafos
TRABAJO DE GRAFOS
Grafos
Publicidad

Último (20)

PDF
Clase 15 - Normas de Aseguramiento.pptx.pdf
PPTX
norma epidemiologica en el primer nivel de atencion
PPTX
saHERNISA FEMsOassaSAsasASAsaSasaSASaAsaS
PPTX
Pensamiento-Estrategico-Adaptativo-en-entornos-VUCA-BANI.pptx
PPTX
SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓ...
PPTX
Reglamento de circulación ferroviaria Peru
PPT
Diseño de proyecto en temas educativos en todos los entornos
PPTX
TRABAJO FINAL-EMPRESA CARNES FRIAS CON CORRECCIONES.pptx
PDF
Estrategias de orientación en facturación electrónica para grandes contribuye...
PPTX
Presentación Plan de Negocio Moderno Morado y Blanco.pptx
PDF
Indicadores Clave de Desempeño (KPI) para transporte
PDF
03 - Unidad II - La Plataforma .NET y C# - 2. Tipos Primitivos y Expresiones.pdf
PPT
Introducción a la contabilidad de costos.ppt
PPTX
GESTION DE RECURSOS HUMANOS - MATERIAL ENTREGADO EN UTN FRC
PDF
DESARROLLO E IMPACTO DE LA INNOVACION.pdf
PDF
MODELO INNOVACION EN NEGOCIOS , METODOLOGIA APLICADA.pdf
PPTX
6. El proceso de la planificación.pptx6. El proceso de la planificación.pptx
PDF
Introducción iso 9001 curso UNIDAD - 3.pdf
PDF
D08_SESION 15 y 16_2024.12.06_ISO-26000.pdf
PPT
TALLERLIDERAZGO.ppt Competencias Gerenciales
Clase 15 - Normas de Aseguramiento.pptx.pdf
norma epidemiologica en el primer nivel de atencion
saHERNISA FEMsOassaSAsasASAsaSasaSASaAsaS
Pensamiento-Estrategico-Adaptativo-en-entornos-VUCA-BANI.pptx
SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓN17SESIÓ...
Reglamento de circulación ferroviaria Peru
Diseño de proyecto en temas educativos en todos los entornos
TRABAJO FINAL-EMPRESA CARNES FRIAS CON CORRECCIONES.pptx
Estrategias de orientación en facturación electrónica para grandes contribuye...
Presentación Plan de Negocio Moderno Morado y Blanco.pptx
Indicadores Clave de Desempeño (KPI) para transporte
03 - Unidad II - La Plataforma .NET y C# - 2. Tipos Primitivos y Expresiones.pdf
Introducción a la contabilidad de costos.ppt
GESTION DE RECURSOS HUMANOS - MATERIAL ENTREGADO EN UTN FRC
DESARROLLO E IMPACTO DE LA INNOVACION.pdf
MODELO INNOVACION EN NEGOCIOS , METODOLOGIA APLICADA.pdf
6. El proceso de la planificación.pptx6. El proceso de la planificación.pptx
Introducción iso 9001 curso UNIDAD - 3.pdf
D08_SESION 15 y 16_2024.12.06_ISO-26000.pdf
TALLERLIDERAZGO.ppt Competencias Gerenciales

Grafos

  • 1. Técnicas de Programación I UNIVERSIDAD PRIVADA SAN PEDRO TEMA : TRABAJO DE INVESTIGACION DE GRAFOS Sepulveda Marreros Nataly Salazar cabello Jaime Romero Palacios Ricardo Quiroz León Jaime Fiestas Estrada Omar ESCUELA DE ING. INFORMATICA Y DE SISTEMAS FACULTAD DE INGENIERIA
  • 2. GRAFOS: Estructura de datos no lineal (Programación no numérica) que permiten representar los diferentes tipos de relaciones entre objetos G=(N,A) Supongamos: N={1,2,3,4,5} Y la siguiente relación en A: R={(1,2);(2,3);(3,4);(4,5)} En forma de grafo sería: 1 2 3 4 5
  • 3. TIPOS DE GRAFOS: GRAFO DIRIGIDO o DIGRAFO * * GRAFOS NO DIRIGIDO * * Grafo Valorado
  • 4. Búsqueda en Profundidad: Se implementa de forma recursiva, aunque también puede realizarse con una pila. Se utiliza un array “val” para almacenar el orden en que fueron explorados los vértices. int id=0; int val[V]; void buscar() { int i; for (i=1; i<=V; i++) val[i]=0; for (i=1; i<=V; i++) if (val[i]==0) visitar(i); } void visitar(int i) // matriz de adyacencia { int t; val[i]=++id; for (t=1; t<=V; t++) if (a[i][t] && val[t]==0) visitar(t); } void visitar(int i) // listas de adyacencia { nodo *t; val[i]=++id; for (t=a[i]; t!=z; t=t->sig) if (val[t->v]==0) visitar(t->v); }
  • 5. Representación de Grafos: Una característica especial en los grafos es que podemos representarlos utilizando dos estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que adoptarán tiempos distintos dependiendo de la forma de representación elegida. En particular, los tiempos de ejecución variarán en función del número de vértices y el de aristas, por lo que la utilización de una representación u otra dependerá en gran medida de si el grafo es denso o disperso. Para nombrar los nodos utilizaremos letras mayúsculas, aunque en el código deberemos hacer corresponder cada nodo con un entero entre 1 y N (número de nodos o vértices) de cara a la manipulación de los mismos.
  • 6. Obtención del camino de un Grafo: Método DIJKSTRA: es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vértices en un grafo dirigido y con pesos en cada arista . void iniciaGrafo() { for ( int i=1; <=n; i++) memset(&C[i][1], 0, n * sizeof(int)); } void insertarnodo( int a, int b, int c) { C[a][b] = C[b][a] = c; } int D[MAXN]; /* distancias mínima desde s al nodo i */ int padre[MAXN]; /* ruta hacia el nodo i desde s */ int permanente[MAXN]; /* verdadero al tener la menor ruta al nodo i */
  • 7. // calculamos las distancias while ( ! pq.empty() ) { nodotmp = pq.top(); pq.pop(); Vi = nodotmp.second; if ( !permanente[Vi] ) { permanente[Vi] = true ; for (Vj = 1; Vj <= n; Vj++) if (!permanente[Vj] && C[Vi][Vj]>0 && D[Vi]+C[Vi][Vj]<D[Vj]) D[Vj] = D[Vi] + C[Vi][Vj], padre[Vj] = Vi, pq.push( pair <int,int> (-D[Vj], Vj) ); } } } // leemos las aristas for ( int i=0; i<e; i++) cout <<“Ingrese Arista1: ”; cin >>a; cout <<“Ingrese Arista2: ”; cin >>b; cout <<“Ingrese Arista3: ”; cin>>c; insertanodo(a, b, c); // usamos dijkstra para calcular la menor distancia // desde el i-esimo nodo hacia los demas for ( int i=1; i<=n; i++) dijkstra( i ), cout <<“La menor distancia desde el nodo hacia los otros nodos es: “<< i; imprimeGrafo(n), cout <<endl; }
  • 8. Método WARSHALL: Para lograr el propósito del recorrido mínimo dentro de un grafo G, es necesario para nuestro caso en particular (puesto que no es la única técnica existente) la utilización del algoritmo de WARSHALL para el camino mínimo, el cual se expresa de la forma siguiente:
  • 9. #include <stdio.h> #include <conio.h> #include <ctype.h> #include <stdlib.h> #include <iostream.h> #include <string.h> #define N 50 struct grafo {int dato; grafo *grafo[N]; grafo *sig; }*Pgrafo; grafo *insertar(grafo *nodo, grafo *Agrafo, int num) {if( !Agrafo ) {Agrafo= (grafo*) malloc( sizeof( grafo ) ); Agrafo->sig= NULL; Agrafo->dato= num; if( !nodo ) return Agrafo; else nodo->sig= Agrafo; return Agrafo; }
  • 10. insertar( Agrafo, Agrafo->sig, num ); return nodo;} int enlazarfull( grafo *nodo ) { int i; int vacio; if( !nodo->sig )return 0; for( i=0;i<vacio(nodo);i++ ) nodo->grafo[i]= NULL; return 1;} void main() { char op='A'; int val; int i; while(op!='S' ) {clrscr(); cout<<&quot;\t [N].- Nuevo Nodo.&quot; ; cout<<&quot;\t [E].- Menu Enlazes.&quot;; cout<<&quot;\t [V].- Ver Grafo.&quot;; cout<<&quot;\t [S].- Salir.&quot;; cout<<&quot;\t\t Digite Opcion: [ ] &quot;; cin>>op;
  • 11. switch(op) { case 'N': cout<<&quot;\n\n Numero: &quot;; cin>>(&quot;&i&quot;,&val); Pgrafo= insertar( Pgrafo, Pgrafo, val ); break; case 'E': enlazarfull(Pgrafo); break; case 'V': break; } } cout<<&quot;\n\n Pulsa una tecla para salir...&quot;; getch(); return 0; }
  • 12. GRACIAS TOTALES, nos vemos en el bingo