Anda di halaman 1dari 12

UNA_______________________________________________________Trabajo Prctico Computacin II

Estructura de Datos tipo Grafo (Diseo del trazado de rutas areas)

Cargar rutas areas en archivo de texto

Almacenar rutas en nodos tipo lista

Buscar en lista pas de salida

Solicitud de pas de salida y de llegada

Buscar en lista pas de llegada

Trazado de ruta area

UNA_______________________________________________________Trabajo Prctico Computacin II

Figura 1

T1

A1

B1

S1

B2

R1

UNA_______________________________________________________Trabajo Prctico Computacin II

TAD GRAFO

Leer archivo texto Grafo Cargar texto en lista

Localizar pases en lista

Trazar ruta de vuelo

Introducir pas de salida y llegada

OPERACIN Leer archivo texto Cargar texto en lista Introducir pas de salida y llegada Localizar pases en lista Trazar ruta de vuelo

DESCRIPCION Carga en memoria un archivo de texto con las rutas areas. Crea una lista con el contenido del archivo de texto, almacenando en cada nodo las rutas areas. Carga el pas de salida y de llegada Busca los pases en las rutas almacenadas en cada nodo de la lista Calcula la ruta de vuelo con el menor numero de conexiones posibles

UNA_______________________________________________________Trabajo Prctico Computacin II

MATRIZ ADYACENCIA

1 2

0 0 0 0 0 0

1 0 0 1 0 0

0 0 0 1 1 1

0 1 1 0 1 0

0 1 1 1 0 1

0 0 1 0 1 0

3
=

4 5 6

UNA_______________________________________________________Trabajo Prctico Computacin II

TAD: Lista Operaciones: CrearLista: Lista Crea una lista vaca. Primero: Lista Posicion Devuelve la posicin del primer elemento de la lista. Siguiente: Lista x Posicion Posicion Dada una posicin p en la lista, devuelve la posicin del elemento situado a continuacin. Dato: Lista x Posicion Tipobase Dada una posicin en la lista, devuelve el dato que contiene. Almacenar: Lista x Tipobase Lista Dado un dato e, lo aade a la lista como ltimo elemento. Buscar: Lista x Tipobase Posicion Dado un dato e, lo busca en la lista y devuelve la posicin que ocupa. Longitud: Lista Entero Dada una lista, devuelve su longitud. Trazar ruta: Lista Posicion string Localiza el menor numero de conexiones entre el pais de llegada con el de salida

UNA_______________________________________________________Trabajo Prctico Computacin II

CODIGO FUENTE {Desarrollado por ****************** program aerolineas_LUXOR; uses crt; type vector= array[1..50] of string; tnodo = ^nodo; nodo = record paises:string; ruta:integer; prox:tnodo; end; var i:integer; ftxt:text; aux1,aux2,lista:tnodo; cad,cad2:integer; linea,salida,llegada,op:string; v1,v2,v3:vector; {*******************************} procedure imprimirlista(lista:tnodo); var aux:tnodo; begin aux := lista; {nos situamos al principio de la lista} writeln('Imprimiendo estructura de datos..'); while (aux <> nil) do begin writeln(aux^.paises); aux:=aux^.prox; end; end; {************************************************} procedure insertarnuevo(var l:tnodo; elem:string); var nuevo:tnodo; begin new(nuevo); nuevo^.paises:=elem; nuevo^.prox:= l; l:=nuevo; end; {***********************************************} procedure cargarutas(var lista:tnodo); var archivo:text; x:string;

UNA_______________________________________________________Trabajo Prctico Computacin II

aux,aux2:tnodo; i:integer; begin i:=0; assign(archivo, 'c:\luxor\paises.txt'); reset(archivo); lista := nil; while not eof(archivo) do begin i:=i+1; readln(archivo, x); new(aux); aux^.paises:= x; aux^.ruta:=i; writeln('Ruta ',aux^.ruta,' ',x); delay(150); if (lista = nil) then begin lista:=aux; aux2:=lista; end else begin aux2^.prox:=aux; aux2:=aux2^.prox; end; end; aux2^.prox:=nil; close(archivo); writeln; end; procedure cabecera; begin clrscr; writeln; writeln('****** AEROlineas Luxor ******'); writeln; writeln('...... Control Rutas aereas ......'); writeln('..................................'); writeln; writeln('-> Cargando lista Rutas de vuelo...(paises.txt)'); delay(1000); writeln;

UNA_______________________________________________________Trabajo Prctico Computacin II

end; {**********************************************************} procedure HASH_llegada(var lista:tnodo; rutapos,celda:integer; salida,llegada:string); var q:tnodo; ciudad,cadena,scan:string; i,j,k,m,max,conex,sw,rutaposl,r1:integer; begin q:=lista; cadena:=''; ciudad:=''; j:=1; k:=1; sw:=0; while (q <> nil) do begin if (q^.ruta >= rutapos) then begin ciudad:=string(q^.paises); max:=length(ciudad); rutaposl:=q^.ruta; for i:= 1 to max do begin cadena := cadena + ciudad[i]; if (ciudad[i] <= chr(32)) then begin if (cadena <> '') then begin v2[j]:=cadena; j:=j+1; cadena:=''; end; end; end;{for para armar las ciudades por separado} writeln; writeln('<--* Localizando pais de llegada: ',llegada,' en ruta: ',rutaposl); writeln; for i:=1 to j do begin write(v2[i]); end; writeln; for i:=1 to j do begin if (i >= celda) then begin

UNA_______________________________________________________Trabajo Prctico Computacin II

if (v2[i] = llegada+chr(32)) then begin writeln; writeln('***> Ubicado en el nodo ',i); writeln; r1:=q^.ruta; sw:=1; break; end else begin {cargando vector con las escalas} v3[k]:=v2[i]; k:=k+1; end; end; end;{for} if (sw=0) then begin writeln; writeln('..No se encontro el pais de llegada en esta Ruta!'); writeln; end; delay(100); end;{1 if} {limpiando vector v2} for i:=1 to j do v2[i]:=''; j:=1; q:=q^.prox; if (sw=1) then begin sw:=0; break; end; end;{end while} writeln('-> Posible ruta de viaje..'); writeln(' -----------------------'); writeln; writeln('Pais Salida ---> ', salida); writeln; writeln('-> (',k-1,') Escalas en: ','con las rutas: ',rutapos,' ',r1); writeln; for i:=1 to k do begin write(v3[i]);

UNA_______________________________________________________Trabajo Prctico Computacin II

end; writeln; writeln; write('Pais Llegada <--- ',llegada); writeln; end;{procedure} {**********************************************************} procedure HASH_salida(var lista:tnodo; salida,llegada:string); var p:tnodo; ciudad,cadena,scan:string; i,j,k,m,max,conex,rutapos,sw,sw2,celda:integer; begin cabecera; writeln; p:=lista; j:=1; m:=1; conex:=0; k:=1; cadena:=''; ciudad:=''; sw:=0; sw2:=0; {buscando el pais de salida en la lista para saber a que ruta pertenece} while (p <> nil) do begin ciudad:=string(p^.paises); rutapos:=p^.ruta; max:=length(ciudad); for i:= 1 to max do begin cadena := cadena + ciudad[i]; if (ciudad[i] <= chr(32)) then begin if (cadena <> '') then begin v1[j]:=cadena; j:=j+1; cadena:=''; end; end; end;{for para armar las ciudades por separado} writeln; writeln('--> Localizando pais de salida: ',salida,' en ruta: ',rutapos); writeln;

UNA_______________________________________________________Trabajo Prctico Computacin II

for i:=1 to j do begin write(v1[i]); end; writeln; for i:=1 to j do begin if (v1[i] = salida+chr(32)) then begin writeln; writeln('***> Ubicado en el nodo ',i); writeln; celda:=i; sw:=1; sw2:=1; break; end else begin {cargando vector con las escalas v2[k]:=v1[i]; k:=k+1;} end; end; if (sw2=1) then begin sw2:=0; HASH_llegada(lista,rutapos,celda,salida,llegada); break; end else begin if (sw=0) then begin writeln; writeln('..No se encontro el pais de salida en esta Ruta!'); writeln; end else begin sw:=0; end; delay(100); {limpiando vector v1} for i:=1 to j do v1[i]:=''; j:=1;

UNA_______________________________________________________Trabajo Prctico Computacin II

p:=p^.prox; end; end;{end while de la lista} writeln; end; {*********************************************} procedure inicio; begin cabecera; cargarutas(lista); writeln; write('-> Coloque el pais de Salida: ');readln(salida); writeln; write('-> Coloque el pais de Llegada: ');readln(llegada); writeln; writeln('-> Buscando posibles rutas...'); delay(1000); HASH_salida(lista,salida,llegada); end; BEGIN{************************************* ppal} op:='s'; while (op='s') or (op='S') do begin inicio; {imprimirlista(lista);}

{**********************************************************************} writeln; {write('-> Presione la tecla <ENTER> para SALIR del programa..');readln;} write('PRESIONE tecla <S/s> para continuar <N/n> para salir del programa: '); readln(op); if (op='N') or (op='n') then break; end;{while ppal} END.

Anda mungkin juga menyukai