/// <summary> /// Retrieves a step-by-step solution from the solver for solving a puzzle. /// </summary> /// <param name="slvr"></param> private void OutputPuzzleSteps(SliderSolver slvr) { foreach (var move in slvr.GetAnswerMoves()) richTextBoxOutput.AppendText(move + Environment.NewLine); }
/// <summary> /// Starts a given search type. /// </summary> /// <param name="lbl">The label output will be written to.</param> /// <param name="type">The search type to perform.</param> private void StartSearch(Label lbl, SearchType type) { var puzzle = CreatePuzzleFromInput(); if (puzzle == null) return; solver = new SliderSolver(puzzle); solver.SolvePuzzle(type); if (solver.Result == null) lbl.Text = "No Result"; UpdateLabelWithPuzzleResults(solver, lbl); if (type == SearchType.AStar) OutputPuzzleSteps(solver); }
/// <summary> /// Updates a given label control text with either an error message or the results from a given solver. /// </summary> /// <param name="slvr"></param> /// <param name="lbl"></param> private void UpdateLabelWithPuzzleResults(SliderSolver slvr, Label lbl) { if (slvr.Result == null) { lbl.Text = "Error!"; return; } lbl.Text = "Starting: " + slvr.CurrentPuzzle.StartingNode.StateS + "\nSolution: " + slvr.Result.StateS + "\nDepth: " + $"{slvr.Result.Depth:n0}" + "\nNodes Expanded: " + $"{slvr.NodesExpanded:n0}" + "\nTime: " + $"{slvr.TimeSeconds:n4}"; }