Prechádzať zdrojové kódy

Added BFS algorithm

Yentl Van Tendeloo 8 rokov pred
rodič
commit
1b95feff1a
1 zmenil súbory, kde vykonal 43 pridanie a 0 odobranie
  1. 43 0
      models/bfs.alc

+ 43 - 0
models/bfs.alc

@@ -0,0 +1,43 @@
+include "primitives.alh"
+include "modelling.alh"
+include "object_operations.alh"
+
+Element function bfs(params : Element, output_mms : Element):
+	Element model
+	String initial
+	Element options
+	Element worklist
+	String state
+	Element path
+	Element path_copy
+	String option
+
+	model = params["reachability"]
+
+	worklist = create_node()
+	initial = set_pop(allInstances(model, "InitialState"))
+	list_append(worklist, create_tuple(initial, create_node()))
+
+	while (read_nr_out(worklist) > 0):
+		work_unit = list_pop(worklist, 0)
+		state = work_unit[0]
+		path = work_unit[1]
+		log("Searching for length " + cast_v2s(read_nr_out(path)))
+
+		if (value_eq(read_attribute(model, state, "error"), True)):
+			// Found an error path!
+			log("Found error path!")
+			log(list_to_string(path))
+			output("Found error path:")
+			output(list_to_string(path))
+			break!
+
+		options = allOutgoingAssociationInstances(model, state, "Transition")
+
+		while (read_nr_out(options) > 0):
+			option = set_pop(options)
+			path_copy = list_copy(path)
+			list_append(path_copy, read_attribute(model, option, "name"))
+			list_append(worklist, create_tuple(readAssociationDestination(model, option), path_copy))
+
+	return create_node()!