public static double getNumberOfSavePaths(Game game, int nodeIndex, MOVE initialMove, int depthLimit) {
		// for each living ghost get the path to next junction
		EnumMap<GHOST, int[]> ghostJunctionPaths = getGhostJunctionPaths(game);

		// initialize BFS
		LinkedList<BFSNode> frontier = new LinkedList<BFSNode>();
		frontier.add(new BFSNode(game.getNeighbour(nodeIndex, initialMove), nodeIndex, 1));
		int paths = 0;

		// BFS
		while (!frontier.isEmpty()) {
			BFSNode node = frontier.pop();

			// continue if node is not safely reachable
			if (reachableByGhost(game, node.nodeIndex, node.depth + EAT_DISTANCE, ghostJunctionPaths))
				continue;

			// reached depth limit
			if (node.depth == depthLimit) {
				paths++;
				continue;
			}

			// expand frontier with neighbor nodes
			for (MOVE move : game.getPossibleMoves(node.nodeIndex)) {
				int neighborNode = game.getNeighbour(node.nodeIndex, move);
				if (neighborNode != node.preNodeIndex)
					frontier.add(new BFSNode(neighborNode, node.nodeIndex, node.depth + 1));
			}
		}

		return (double) paths / 15;
	}