Professional Documents
Culture Documents
Figura 1
T1
A1
B1
S1
B2
R1
TAD GRAFO
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
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
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
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;
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;
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
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]);
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;
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;
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.