Técnicas de Programación I UNIVERSIDAD PRIVADA SAN PEDRO TEMA : TRABAJO DE INVESTIGACION DE GRAFOS <ul><li>Sepulveda Marre...
GRAFOS: Estructura de datos no lineal (Programación no numérica) que permiten representar los diferentes tipos de relacion...
TIPOS DE GRAFOS: <ul><li>GRAFO DIRIGIDO o DIGRAFO </li></ul>* * <ul><li>GRAFOS NO DIRIGIDO </li></ul>* * <ul><li>Grafo Val...
Búsqueda en Profundidad: Se implementa de forma recursiva, aunque también puede realizarse con una pila. Se utiliza un arr...
Representación de Grafos:  Una característica especial en los grafos es que podemos representarlos utilizando dos estructu...
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ért...
// calculamos las distancias while (  ! pq.empty() ) { nodotmp = pq.top();  pq.pop(); Vi = nodotmp.second; if  ( !permanen...
Método WARSHALL: Para lograr el propósito del recorrido mínimo dentro de un grafo G, es necesario para nuestro caso en par...
#include <stdio.h> #include <conio.h> #include <ctype.h> #include <stdlib.h> #include <iostream.h> #include <string.h> #de...
insertar( Agrafo, Agrafo->sig, num ); return nodo;} int enlazarfull( grafo *nodo ) {  int i; int vacio; if( !nodo->sig )re...
switch(op) { case 'N': cout<<&quot;

 Numero: &quot;; cin>>(&quot;&i&quot;,&val); Pgrafo= insertar( Pgrafo, Pgrafo, val );...
GRACIAS TOTALES, nos vemos en el bingo
Upcoming SlideShare
Loading in …5
×

Grafos

2,275
-1

Published on

grafos

Published in: Business, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,275
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
39
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Grafos

  1. 1. Técnicas de Programación I UNIVERSIDAD PRIVADA SAN PEDRO TEMA : TRABAJO DE INVESTIGACION DE GRAFOS <ul><li>Sepulveda Marreros Nataly </li></ul><ul><li>Salazar cabello Jaime </li></ul><ul><li>Romero Palacios Ricardo </li></ul><ul><li>Quiroz León Jaime </li></ul><ul><li>Fiestas Estrada Omar </li></ul>ESCUELA DE ING. INFORMATICA Y DE SISTEMAS FACULTAD DE INGENIERIA
  2. 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. 3. TIPOS DE GRAFOS: <ul><li>GRAFO DIRIGIDO o DIGRAFO </li></ul>* * <ul><li>GRAFOS NO DIRIGIDO </li></ul>* * <ul><li>Grafo Valorado </li></ul>
  4. 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. 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. 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. 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. 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. 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. 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; [N].- Nuevo Nodo.&quot; ; cout<<&quot; [E].- Menu Enlazes.&quot;; cout<<&quot; [V].- Ver Grafo.&quot;; cout<<&quot; [S].- Salir.&quot;; cout<<&quot; Digite Opcion: [ ] &quot;; cin>>op;
  11. 11. switch(op) { case 'N': cout<<&quot; Numero: &quot;; cin>>(&quot;&i&quot;,&val); Pgrafo= insertar( Pgrafo, Pgrafo, val ); break; case 'E': enlazarfull(Pgrafo); break; case 'V': break; } } cout<<&quot; Pulsa una tecla para salir...&quot;; getch(); return 0; }
  12. 12. GRACIAS TOTALES, nos vemos en el bingo
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×