function shortestPath($vertices, $edges, $sourceVertex) { $leftVertices = $vertices; $seenVertices = array(); $distances[$sourceVertex->guid] = 0; $previousVertex = array(); $i = 0; while (count($seenVertices) != count($vertices) && $i++ < count($vertices)) { $currentVertex = $vertices[get_key_for_minimum_value($distances, $seenVertices)]; $seenVertices[$currentVertex->guid] = $currentVertex; if (isset($edges[$currentVertex->guid])) { foreach ($edges[$currentVertex->guid] as $destinationVertexGuid => $weight) { if (!isset($distances[$destinationVertexGuid]) || $distances[$currentVertex->guid] + $weight < $distances[$destinationVertexGuid]) { $distances[$destinationVertexGuid] = $distances[$currentVertex->guid] + $weight; $previousVertex[$destinationVertexGuid] = $currentVertex->guid; } } } } return $previousVertex; }
function primsAlgorithm($graph, $sourceVertex) { $vertices = $graph->vertices; $edges = $graph->edges; $seenVertices = array(); $distances[$sourceVertex->guid] = 0; $previousVertex = array(); $i = 0; while ($i++ < count($vertices)) { $currentVertex = $vertices[get_key_for_minimum_value($distances, $seenVertices)]; $seenVertices[$currentVertex->guid] = $currentVertex; if (isset($edges[$currentVertex->guid])) { foreach ($edges[$currentVertex->guid] as $destinationVertexGuid => $weight) { if (!in_array($vertices[$destinationVertexGuid], $seenVertices) && (!isset($distances[$destinationVertexGuid]) || $weight < $distances[$destinationVertexGuid])) { $distances[$destinationVertexGuid] = $weight; $previousVertex[$destinationVertexGuid] = $currentVertex->guid; } } } } return $previousVertex; }