Saltar al contenido

Algoritmo complejo usando GraphScript

En Pegar Consola SQL pegue y ejecute el siguiente código. Crea un procedimiento para calcular las distancias de ruta más cortas a las estaciones con restaurantes.

SET SCHEMA "SKIING";

--DROP TYPE "TT_RESTAURANTS";
CREATE TYPE "TT_RESTAURANTS" AS TABLE ("node_id" INTEGER, "distance" INTEGER, "hops" BIGINT);

--DROP PROCEDURE "NEAREST_RESTAURANT";
CREATE OR REPLACE PROCEDURE "NEAREST_RESTAURANT"(IN startV INT, OUT res "TT_RESTAURANTS")
LANGUAGE GRAPH READS SQL DATA AS
BEGIN
	GRAPH g = Graph("SKIING");
	VERTEX v_s = Vertex(:g, :startV);
	MULTISET<Vertex> rests = v IN Vertices(:g) WHERE :v."restaurant" == N'TRUE';
	ALTER g ADD TEMPORARY VERTEX ATTRIBUTE (INT "distance" = 0);
	ALTER g ADD TEMPORARY VERTEX ATTRIBUTE (BIGINT "hops" = 0L);
	FOREACH rest in :rests {
		VERTEX v_rest = Vertex(:g, :rest."node_id");
		WeightedPath<INT> p = Shortest_Path(:g, :v_s, :v_rest, (Edge conn) => INTEGER { return :conn."length"; } );
		rest."hops" = Length(:p);
		rest."distance" = Weight(:p);
	}
	res = SELECT :v."node_id", :v."distance", :v."hops" FOREACH v IN :rests;
END;

Esto demuestra NEAREST_RESTAURANT objeto i Procedimientos. Haga clic derecho en el nombre del procedimiento y seleccione Crear una declaración CALL con UI.

Se genera la instrucción de llamada a procedimiento. Dar un valor de entrada 15 y haga clic en Correr.

Ejecutar el procedimiento de generación

Cuando se ejecuta la secuencia de comandos del gráfico, se muestra el resultado. Muestra la distancia más corta en metros a cada estación con el restaurante más el número de saltos para llegar allí.

Resultados de GraphScript

¿Cuál es la distancia de camino más corta en metros desde la estación? 15 a la estación 3?