public FifteenSolver(Fifteen initial, string path) { try { String input = File.ReadAllText(@path); int i = 0, j = 0; int[,] fileOut = new int[4, 4]; foreach (var row in input.Split('\n')) { j = 0; foreach (var col in row.Split(',')) { if (!String.IsNullOrEmpty(col)) { fileOut[i, j] = int.Parse(col); } j++; } i++; } initial.fifteen = fileOut; this.initial = initial; ItemComp <Item> comparer = new ItemComp <Item>(); PriorityQueue <Item> priorityQueue = new PriorityQueue <Item>(10, comparer); priorityQueue.Enqueue(new Item(null, initial)); while (true) { Item fifteen = priorityQueue.Dequeue(); if (fifteen.fifteen.isGoal()) { itemToList(new Item(fifteen, fifteen.fifteen)); return; } foreach (var item in fifteen.fifteen.Neighbors()) { Fifteen tempFif = item; if (item != null && !containsInPath(fifteen, tempFif)) { priorityQueue.Enqueue(new Item(fifteen, tempFif)); } } } } catch (OutOfMemoryException ex) { } }
private bool containsInPath(Item item, Fifteen fifteen) { Item item2 = item; while (true) { if (item2.fifteen.Equals(fifteen)) { return(true); } item2 = item2.prevFifteen; if (item2 == null) { return(false); } } }
public Item(Item prevFifteen, Fifteen fifteen) { this.prevFifteen = prevFifteen; this.fifteen = fifteen; }